mysql效能調優3 索引相關

2021-08-27 19:59:23 字數 2889 閱讀 2969

眾所周知,索引可以加快查詢的速度,但有的時候你的乙個小不注意索引就失效。 本博文結合例項追根究底研究索引。

前置條件:

為表達效果,請按本人部落格「mysql效能調優1」博文往supan表中插入7000萬資料。注意設定innodb_flush_log_at_trx_commit=2,否則插入7000萬資料,大概需要耗費你4個小時左右。

[color=darkblue]例項一:演示索引的告訴查詢[/color]

首選不建立supan表的grade欄位索引 進行grade欄位的查詢:

mysql> select * from supan where grade = 1515215;

+--------+---------+---------+

| name | id | grade |

+--------+---------+---------+

| 寮犱笁 | 4535219 | 1515215 |

+--------+---------+---------+

1 row in set ([color=blue]9.17 [/color]sec)

耗時:9.17秒

建立grade欄位上的索引:

mysql> create index index_supan_grade on supan(grade);

query ok, 0 rows affected (1 min 17.03 sec)

records: 0 duplicates: 0 warnings: 0

再次查詢

mysql> select * from supan where grade = 1515215;

+--------+---------+---------+

| name | id | grade |

+--------+---------+---------+

| 寮犱笁 | 4535219 | 1515215 |

+--------+---------+---------+

1 row in set (0.09 sec)

建立完索引後,用時僅為0.09秒 效率提公升到 9.17 / 0.09 倍

[color=darkblue]二:索引欄位上用表示式失效。[/color]

mysql> select * from supan where grade*10 = 256450;

+--------+---------+-------+

| name | id | grade |

+--------+---------+-------+

| 寮犱笁 | 1045649 | 25645 |

| 寮犱笁 | 2045649 | 25645 |

| 寮犱笁 | 3045649 | 25645 |

+--------+---------+-------+

3 rows in set (9.11 sec)

耗時9.11,又回到了遠古時代,呵呵呵。上面的sql其實可以完全改為下面的高效率sql:

mysql> select * from supan where grade = 256450;

+--------+---------+--------+

| name | id | grade |

+--------+---------+--------+

| 寮犱笁 | 1276454 | 256450 |

| 寮犱笁 | 2276454 | 256450 |

| 寮犱笁 | 3276454 | 256450 |

+--------+---------+--------+

3 rows in set (0.11 sec)

功能完全相同,但效率就是天上地下了,其中緣故你懂得。

[color=darkblue]三:mysql的索引欄位上用聚湊函式,索引不失效。oracle失效(值得注意)[/color]

mysql> select max(grade) from supan;

+------------+

| max(grade) |

+------------+

| 5792149 |

+------------+

1 row in set (0.00 sec)

[color=darkblue]四:索引對插入的影響[/color]

有索引的時候插入記錄

mysql> insert into supan(name,grade) values('chenchaoyang',100);

query ok, 1 row affected (0.09 sec)

刪除索引

mysql> drop index index_supan_grade on supan;

query ok, 0 rows affected (0.55 sec)

records: 0 duplicates: 0 warnings: 0

再次插入資料

mysql> insert into supan(name,grade) values('chenchaoyang',100);

query ok, 1 row affected (0.04 sec)

可以從兩次插入的耗時分析,在索引的時候插入資料,效率比較低下,所以在經常需要插入,更新的表中,盡量少使用索引。

MySql效能調優 索引

在對mysql的查詢語句優化過程中,我們最常用的手段就是新增索引,可見索引對資料庫優化的重要性,下面就說一說在優化過程中,索引的一些用法,鑑於本人水平有限,可能會有一些說得不對的地方,歡迎指正。下面例子中需要使用1張表,表結構如下 create table order order id int 11...

mysql效能調優

1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在where子句中對字段進行null判斷,否則會導致引擎放棄使用索引而進行全表掃瞄。3.應盡量避免在where子句中使用 或 操作符,否則會導致引擎放棄使用索引而進行全表掃瞄。4...

Mysql效能調優

mysql 效能調優有很多方面,主要是這幾個方面 1 正規化 是指表的列具有原子性,不可再拆分,只要資料庫是線性的,都自動滿足1nf。2 正規化 表中的紀錄是唯一的。3 正規化 表中資料不應該有冗餘,如果通過某個欄位就能得到跟該字段相關的資訊,就沒必要將這些資訊,再存放到該表中。在3nf中,可能會對...