七、mysql索引選擇,mysql索引
七、mysql索引選擇
1.myisam,bdb,innodb,memory 單表至少支持16個索引
2.create index id_index on emp (id) 為emp表創建一個名為id_index的id字段的索引
3.drop index id_index on emp 刪除emp表的id_index 索引
4.explain xxxxxxx,可以查看相關的執行結果,用於優化表用
5.最合適的索引列是“條件列”,而不是“選擇列”
比如 select name from emp where year >= 2014;
那麼最好是在year字段上創建索引,而不是name字段
6.使用索引的字段,字段值最好是具有唯一性的,因為越具有唯一性,索引意義越大
7.btree索引通過索引訪問,而hash索引則進行全表掃描
MySQL數據庫優化(七):MySQL怎使用索引
索引用於快速找到特定一些值的記錄。如果沒有索引,MySQL就必須從第一行記錄開始讀取整個表來檢索記錄。表越大,資源消耗越大。如果在字段上有索引的話,MySQL就能很快決定該從數據文件的哪個位置開始搜索記錄,而無須查找所有的數據。如果表中有1000條記錄的話,那麼這至少比順序地讀取數據快100倍。注意,如果需要存取幾乎全部1000條記錄的話,那麼順序讀取就更快了,因為這樣會使磁盤搜索最少。
大部分MySQL索引(PRIMARY KEY, UNIQUE,INDEX 和 FULLTEXT)都是以B樹方式存儲。只有空間類型的字段使用R樹存儲,MEMORY (HEAP)表支持哈希索引。
字符串默認都是自動壓縮前綴和後綴中的空格。
通常,如下所述幾種情況下可以使用索引。哈希索引(用於 MEMORY 表)的獨特之處在後面會討論到。
想要盡快找到匹配 WHERE 子句的記錄。
根據條件排除記錄。如果有多個索引可共選擇的話,MySQL通常選擇能找到最少記錄的那個索引。
做表連接查詢時從其他表中檢索記錄。
想要在指定的索引字段 key_col 上找到它的 MIN() 或 MAX() 值。優化程序會在檢查索引的
key_col 字段前就先檢查其他索引部分是否使用了 WHERE key_part_# = constant 子句。這樣的話,
MySQL會為 MIN() 或 MAX() 表達式分別單獨做一次索引查找,並且將它替換成常數。當所有的表達式都被替換成常數後,查詢就立刻返回。如下:
SELECT MIN(key_part2),MAX(key_part2) FROM tbl_name WHERE key_part1=10;
對表作排序或分組,當在一個可用的最左前綴索引上做分組或排序時(如 ORDER
BY key_part1, key_part2)。如果所有的索引部分都按照 DESC 排序,索引就按倒序排序。
有些時候,查詢可以優化使得無需計算數據就能直接取得結果。當查詢使用表中的一個數字型字段,且這個字段是索引的最左部分,則可能從索引樹中能很快就取得結果:
SELECTkey_part3FROMtbl_nameWHEREkey_part1=1
假設有如下 SELECT 語句:
如果在 col1 和 col2 上有一個多字段索引的話,就能直接取得對應的記錄了。
MySQL數據庫優化(七):MySQL怎使用索引
索引用於快速找到特定一些值的記錄。如果沒有索引,MySQL就必須從第一行記錄開始讀取整個表來檢索記錄。表越大,資源消耗越大。如果在字段上有索引的話,MySQL就能很快決定該從數據文件的哪個位置開始搜索記錄,而無須查找所有的數據。如果表中有1000條記錄的話,那麼這至少比順序地讀取數據快100倍。注意,如果需要存取幾乎全部1000條記錄的話,那麼順序讀取就更快了,因為這樣會使磁盤搜索最少。
大部分MySQL索引(PRIMARY KEY, UNIQUE,INDEX 和 FULLTEXT)都是以B樹方式存儲。只有空間類型的字段使用R樹存儲,MEMORY (HEAP)表支持哈希索引。
字符串默認都是自動壓縮前綴和後綴中的空格。
通常,如下所述幾種情況下可以使用索引。哈希索引(用於 MEMORY 表)的獨特之處在後面會討論到。
想要盡快找到匹配 WHERE 子句的記錄。
根據條件排除記錄。如果有多個索引可共選擇的話,MySQL通常選擇能找到最少記錄的那個索引。
做表連接查詢時從其他表中檢索記錄。
想要在指定的索引字段 key_col 上找到它的 MIN() 或 MAX() 值。優化程序會在檢查索引的
key_col 字段前就先檢查其他索引部分是否使用了 WHERE key_part_# = constant 子句。這樣的話,
MySQL會為 MIN() 或 MAX() 表達式分別單獨做一次索引查找,並且將它替換成常數。當所有的表達式都被替換成常數後,查詢就立刻返回。如下:
SELECT MIN(key_part2),MAX(key_part2) FROM tbl_name WHERE key_part1=10;
對表作排序或分組,當在一個可用的最左前綴索引上做分組或排序時(如 ORDER
BY key_part1, key_part2)。如果所有的索引部分都按照 DESC 排序,索引就按倒序排序。
有些時候,查詢可以優化使得無需計算數據就能直接取得結果。當查詢使用表中的一個數字型字段,且這個字段是索引的最左部分,則可能從索引樹中能很快就取得結果:
SELECTkey_part3FROMtbl_nameWHEREkey_part1=1
假設有如下 SELECT 語句:
如果在 col1 和 col2 上有一個多字段索引的話,就能直接取得對應的記錄了。如果在 col1 和 col2 分別有獨立的索引,那麼優化程序會先找到限制最多的那個索引,然後根據哪個索引能找到更少的記錄就決定使用哪個索引。