反例:(统计用户数量)
- List<User> users = userMapper.selectAll();
- return users.size();
正例:
- int count = userMapper.countUser("select count(*) from user");
- return count;
反例:(查找nickname = 报之琼瑶 的用户)
- select id, nickname from t where nickname = '报之琼瑶'
正例:
- select id, nickname from t where nickname = '报之琼瑶' limit 1
理由:
反例:(查找name = 张三 或者 法外狂徒 的高质用户)
- select id,name from t where name = '张三' or name = '法外狂徒'
正例:
- select id,name from t where name = '张三'
- union all
- select id,name from t where name = '法外狂徒'
理由:
使用or将导致引擎放弃使用索引而进行全表扫描
like常用于模糊查询,书写 不恰当的编码会导致索引失效
反例:
- select userId,name from user where userId like '%123'
正例:
- select userId,name from user where userId like '123%'
%123, 百分号在前不走索引
123%,百分号在后走索引
但是高质也会存在百分号在后不走索引的情况,mysql的书写innodb存储引擎最终执行哪种方法都是基于成本计算的, 通过比较全表扫描和二级索引比较再回表查询
可以通过
INFORMATION_SCHEMA.OPTIMIZER_TRACE来分析查询过程
trace字段json复制出来即可分析
反例:(统计用户数量)
- select * from t
正例:
- select id,书写 name, tel from t
理由:
6、尽量避免在索引列上使用mysql的内置函数
反例:
- select * from user where date_add(create_time,Interval 5 day) >=now()
正例:
- select * from user where create_time >= date_add(now(), interval - 5 day)
不走索引
走索引
反例: (对字段user_age进行运算操作, 不走索引)
- select * from user where user_age - 1 = 2
正例: (走索引)
- select * from user where user_age = 3
责任编辑:华轩 来源: 今日头条 SQL数据库开发
(责任编辑:知识)
达川区市场监督管理局:“三快”部阵知识产权执法 助推“春雷行动2023”
天保基建(000965.SZ):2020年净利降49.78% 基本每股收益0.0859元
四川省达州市达川区人大常委会评议区市场监管局开展交心谈心工作
央行上海总部:10月人民币贷款增加357亿元 住户部门贷款增加202亿元
我国最长盾构高速公路隧道首段顺利贯通 北京市交通服务水平再提升