SQL的一些优化

 2023-09-15 阅读 18 评论 0

摘要:2019独角兽企业重金招聘Python工程师标准>>> sql优化的一般步骤、负向查询不能使用索引 select * from system_user where id not in (1,2,3,4,5) sqlserver优化、应该修改为 select * from system_user where id in(6,7,8,9,10) 常见的sql优化?前导模糊查询不能使

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

sql优化的一般步骤、负向查询不能使用索引

select * from system_user where id not in (1,2,3,4,5)

sqlserver优化、应该修改为

select * from system_user where id in(6,7,8,9,10) 

常见的sql优化? 前导模糊查询不能使用索引

select name from system_user where name like '%yuanzheng'

非前导则可以 

select name from system_user where name like 'zengy%'

 数据区分不明显的不建议创建索引

如 user 表中的性别字段,可以明显区分的才建议创建索引,如身份证等字段。

字段的默认值不要设置为null 

这样会带来和预期不一致的查询结果。

在字段上计算不能命中索引

 select * from system_user where FROM_UNIXTIME(create_time) < CURDATE()

应该修改为

select * from system_user where create_time <  FROM_UNIXTIME(CURDATE())

最左前缀问题

如果给 user 表中的 username pwd 字段创建了复合索引那么使用以下SQL 都是可以命中索引

select * from system_user where username='zengyz' and pwd='123456'

select * from system_user where pwd='123456' and username='zengyz'

select * from system_user where username='zengyz'

但是使用

select * from system_user where pwd='123456'

是不能命中索引的 

如果明确知道只有一条记录返回 

select * from system_user where username='zengyz' limit 1

可以提高效率,可以让数据库停止游标移动    

不要让数据库帮我们做强制类型转换 

select * from system_user where phone=13200000000

这样虽然可以查出数据,但是会导致全表扫描。

需要修改为

select * from system_user where phone='13200000000'

转载于:https://my.oschina.net/u/3194578/blog/2052261

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/63473.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息