用like模糊查询不要用 ‘%’ 开头
数据库引擎会放弃索引进行全表扫描,如果不是必要,尽量别这么干
select id from user where name like '%codeMan%' //×
不要动不动就select *
如果你要的只是用户名,为啥你要用*呢,不要返回用不到的任何字段,万一用户的属性有几十行,你只是想要个用户名,何必呢
select * from user // ×
select user_name from user // √
别动不动就全表扫描
考虑在where和order by涉及的列加索引
不要在where对字段进行null判断
数据库引擎会放弃索引进行全表扫描,如果不是必要,尽量别这么干
换句话说,你可以用0来代替null
不要在where子句用!或者>、
数据库引擎会放弃索引进行全表扫描
不要在where里面写字段表达式
数据库引擎会放弃索引进行全表扫描
select id from user where money / 10 = 10
你不能这样写么?
select id from user where money = 10 * 10
都给我弄到 “ = ” 右边去
不要在where子句用函数操作
select id form user where substring(user_name,1,4)='code' //×
给我这样写
select id from user where user_name like 'code%'
不要用in和not in
数据库引擎会放弃索引进行全表扫描,如果是连续数值,你可以用between;如果是子查询,你可以用exists,很多时候用exists代替in是一个好选择
不要在where子句使用or
数据库引擎会放弃索引进行全表扫描
select id from user where money = 50 or money = 100 //×
给我这样写
select id from user where money = 50 union all select id from user where money = 100
如果索引是复合索引,必须使用该索引中的第一个字段作为条件
这样才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致
索引的正确建立
数据量小的表不需要建立索引
不经常用的列不需要加索引
对于重复多的数据,不要去建索引。
SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,比如表中有个字段sex,只有男和女,有必要去建索引吗?没有,这样反而适得其反。
索引是不是越多约好?
数据变更需要维护索引,因此更多的索引意味着更多的维护成本。
更多的索引意味着更多的存储空间。
索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率, 因为 insert 或 update 时有可能会重建索引
能用数字型字段表示尽量用数字型字段
尽量用varchar代替char
varchar是变长字段,可以节省存储空间,搜索效率高
关于游标
尽量不要使用游标,效率较差
ps:
关于索引的深入,可以深入浅出看看这两篇文章,都是转载自极客的一位老师写的,觉得写的很好~
索引1
索引2
标签:面试官,..,索引,全表,user,mysql,where,id,select
来源: https://blog.csdn.net/weixin_44233929/article/details/105813826