随笔 - 6  文章 - 0  评论 - 0  阅读 - 4379

SQL优化思路

1、首先要避免全表扫描,检查是否有索引
  没有索引考虑是否建立索引(可以在经常需要查询的列上、需要排序的列上添加索引),mysql可以通过explain查看执行计划

2、查看索引是否生效(以下是索引失效的部分场景)
  不满足最左匹配原则
  like以%开头或者全模糊
  >、<号右边的索引会失效
  or也会导致索引失效(在or的两边都加索引才不会失效或者使用union(去重)、union all(不去重)替代or)
  !=、<>也会导致索引失效
  在where子句中使用表达式操作、函数操作等
3、sql语句结构的优化
  避免使用select*,不要返回不必要的字段,增加索引覆盖的概率
  尽量减少子查询(子查询会创建临时表,查询完毕删除临时表)
  调整where子句的连接顺序,将过滤数据多的条件放在前面,最快速度缩小结果集

mysql:其条件执行顺序是 从左往右,自上而下;where执行顺序是从左往右执行的,在数据量小的时候不用考虑,但数据量多的时候要考虑条件的先后顺序,
此时应遵守一个原则:排除越多的条件放在第一个
orcale:其条件执行顺序是从右往左,自下而上;由于解析是从下到上进行的,因此应该先编写表联接,然后再执行WHERE子句的任何条件,
并在联接完成后将筛选出最大记录的条件放在最后。

  尽量减少联表查询,联表查询是笛卡尔乘积的形式,检索的数据几何倍上升
  一次查询的结果最好不要过大,可以使用分页查询
4、数据库表设计的优化
  单表的字段最好不要超过20个。如果是比较大的表,有的字段使用的多,有的字段使用比较少,使用频率比较少的会拖慢查询速度
  表的结构是否合理(范式、反范式需要结合实际场景来决定)
  列类型的选择是否合适(能用int却用了bigint等)

posted on   来自梦里的BUG  阅读(110)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示