5 SQL语句优化

1、负向查询不能使用索引
select name from user where id not in (1,3,4);
-- 应该修改为
select name from user where id in (2,5,6);
2、前导模糊查询索引会失效
select name from user where name like '%zhangsan' --无效索引
select name from user where name like 'zhangsan%' --索引有效
3、数据区分不明显的不建议创建索引

例如:性别字段不建议用来创建索引

4、字段的默认值不要为 null
5、在字段上进行计算不能命中索引
select name from user where FROM_UNIXTIME(create_time) < CURDATE();
-- 应该修改为
select name from user where create_time < FROM_UNIXTIME(CURDATE());
6、最左前缀原则
-- 如果给 user 表中的 username pwd 字段创建了复合索引那么使用以下SQL 都是可以命中索引
1.select username from user where username='zhangsan' and pwd ='axsedf1sd';
2.select username from user where pwd ='axsedf1sd' and username='zhangsan';
3.select username from user where username='zhangsan';
-- 但是,跳过username直接使用pwd,会导致索引失效
select username from user where pwd ='axsedf1sd';

-- 如果明确知道只会返回一条记录的时候,使用limit可以提高效率,游标不会移动
select name from user where username='zhangsan' limit 1;
--不过通常生产情况下,这种情况不多,比如一些配置表,常量表等,不过索引是const常量类型的话,效率是最高的
7、类型转换会导致索引失效
-- 例如,varchar类型进行自动转换的时候
select name from user where telno=13033334444;
-- 应该修改为
select name from user where telno='13033334444';
未完待续,后面会进行干货补上

你可能感兴趣的:(数据库,sql,数据库,mysql)