程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 七、mysql索引選擇,mysql索引

七、mysql索引選擇,mysql索引

編輯:MySQL綜合教程

七、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 分別有獨立的索引,那麼優化程序會先找到限制最多的那個索引,然後根據哪個索引能找到更少的記錄就決定使用哪個索引。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved