总结起来就一句话:
1、索引的列越简单越好,或来自于简单的表;
2、最好将 索引列 放在where 条件中,且越简单的值越要放在左边,如 sex与车型,sex就2个值:男、女,而车型N个,所以就得把sex放在左边。
下面部分为转载,
2.1在where条件常用的列上加上索引。
例如:where cat_id=3 and price>100;// 查询第3个栏目,100元以上的商品。
误区:cat_id 和price上都加索引
错误:只能用上cat_id或者是price索引,因为都是独立的索引,同时只能用上1个
2.2 在多列上建立索引后,查询那个列,索引都将会发挥作用。
误区:在多列索引上,索引发挥作用,需要满足左前缀需求。
以index(a,b,c)为例:
语句 | 索引是否发挥作用 |
where a=3 | 是,只是用了a列的索引 |
Where a=3 and b=5 | 是,使用了a,b列 |
Where a=3 and b=5 and c=4 | 是,使用了abc |
Where b=3 or where c=4 | 否 |
Where a=3 and c=4 | a列能发挥索引,c不能 |
Where a=3 and b>10 and c=7 | A能利用,b能利用, C不能利用 |
同上,where a=3 and b like ‘xxxx%’ and c=7 | A能用,B能用,C不能用 |
为便于理解, 假设ABC各10米长的木板, 河面宽30米.
全值索引是则木板长10米,
Like,左前缀及范围查询, 则木板长6米,
自己拼接一下,能否过河对岸,就知道索引能否利用上.
如上例中, where a=3 and b>10, and c=7,
A板长10米,A列索引发挥作用
A板正常接B板, B板索引发挥作用
B板短了,接不到C板, C列的索引不发挥作用