赞
踩
在数据库表中,使用索引可以提高查询速度。但是索引并不是对所有的查询操作都会生效的。比如以下几种情况,将导致索引失效:
1、如果查询条件用or,必须or条件中的每个列都加上索引,否则无效。
2、对于复合索引(又叫多列索引或者联合索引),如果查询的列不使用复合索引的第一部分,则不使用索引。例如,tb表的复合索引为(key1,key2,key3),则查询select * from tb where key2=1 and key2>5将不会使用索引。
3、如果like是以%开头的,则该列上的索引不会被使用。例如:select * from tb where key1 like "%a"; 即使key1列上建立了索引,该查询也不会使用索引。
4、存在索引列的数据类型隐形转换,则不使用索引。例如:列key1的数据类型为字符串,select * from tb where key1=1; 将不会使用索引。要想使用索引,必须将字符串用引号印起来。
5、where字句里对索引列有数学运算或者使用函数,则不使用索引。
1、数据唯一性差(一个字段的取值只有几种情况)的字段不要使用索引:
例如性别,只有两种可能数据。意味着索引的二叉树级别少,这样的二叉树查询无异于全表扫描。
2、频繁更新的字段不要使用索引:
例如login_count登陆次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。