MySQL 索引 mysql性能優化之索引優化

幾乎所有的索引都是建立在字段之上.

索引: 系統根據某種算法, 將已有的數據(未來可能新增的數據),單獨建立一個文件: 文件能夠實現快速的匹配數據, 並且能夠快速的找到對應表中的記錄. 

索引的意義

  1. 提升查詢數據的效率

  2. 約束數據的有效性(唯一性等)

增加索引的前提條件: 索引本身會產生索引文件(有時候有可能比數據文件還大) ,會非常耗費磁盤空間.

如果某個字段需要作爲查詢的條件經常使用, 那麼可以使用索引(一定會想辦法增加);

如果某個字段需要進行數據的有效性約束, 也可能使用索引(主鍵,唯一鍵)

 

Mysql中提供了多種索引

  1. 主鍵索引: primary key

  2. 唯一索引: unique key

  3. 全文索引: fulltext index

  4. 普通索引: index

  5. 外鍵索引: foreign key

 

全文索引: 針對文章內部的關鍵字進行索引

全文索引最大的問題: 在於如何確定關鍵字

英文很容易: 英文單詞與單詞之間有空格

中文很難: 沒有空格, 而且中文可以各種隨意組合(分詞: sphinx)

 

什麼情況下有索引,但用不上

  1. 條件中有or,即使其中有部分條件帶索引也不會使用(這也是爲什麼儘量少用or的原因),要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引。

  2. 對於多列索引,第一個索引沒有使用,則不會使用索引。例如索引是key index (a,b,c). 可以是a | a,b| a,b,c 3種組合進行查找,但使用b,c不會使用索引。

  3. like查詢是以%或 _開頭不會使用,% 或 _可以放在後面。

  4. 存在索引列的數據類型隱形轉換,則用不上索引,比如列類型是字符串,那一定要在條件中將數據使用引號引用起來,否則不使用索引。

  5. where 子句裏對索引列上有數學運算,用不上索引。

  6. where 子句裏對有索引列使用函數,用不上索引。

  7. 如果mysql估計使用全表掃描要比使用索引快,則不使用索引。

 
相關文章:  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章