MYSQL 索引創建與使用


可能用到索引的地方:

where 子句,order by,group by

不需要創建索引的情況:

1. 表比較小

2.賦值有限的列(枚舉),不要創建索引。創建的索引返回的行越少越好,此時區分度大。

3.用不上索引的列,不要創建索引。

4.長字符串的列,不要全部創建索引,但可以使用短索引(名字的頭8個字符)。

索引有效的情況:

<,<=,=,>,>=,between,in,like 'admin%',獨立索引+or+獨立索引+mysiam

索引失效的情況:

1. or+innodb

3. like查詢是以%開頭,不使用索引。like '%admin' 

4. 字符類型在where子句中不加引號,不使用索引

5. not in 或<> 或!= 

6.對字段加函數或者運算的

7. 在order by操作中,mysql只有在排序條件不是查詢條件表達式時才使用索引。盡管如此,在涉及多個數據表的查
詢里,即使有索引可用,那些索引在加快ORDER BY操作方面也沒什么作用。

9. 在JOIN操作中,只有在主鍵和外鍵的數據類型相同時才能使用索引,否則即使建立了索引也不會使用。

10. is not null 或 is null 索引會失效

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

比如:列id均勻的分布在1-100之間。下面的sql則不會使用索引
select * from table_name where id > 1 and id<90;
 

查看索引的使用情況
show status like ‘handler_read%';
大家可以注意:
handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數
handler_read_rnd_next:這個值越高,說明查詢低效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM