展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

索引优化:其它查询优化策略

  • EXISTS和IN的区分
# 大表A驱动小表cc时用in;即当A表的数据量大于B表的数据量时
SELECT * FROM A WHERE cc IN (SELECT CC FROM B);
# 当A表的数据量小于B表的数据量时
# 小表A驱动大表cc时用EXISTS ,因为执行时每次是从A中取一条数据到SELECT cc FROM B WHERE B.cc = a.cc中执行,A小一点更合适
SELECT * FROM A WHERE EXISTS (SELECT cc FROM B WHERE B.cc = a.cc)
  • COUNT(*)与COUNT(具体字段)效率
COUNT(*)与COUNT(1)都是统计表的所有数量,效率差别不大
如果使用MyISAM存储引擎,统计数据表的行数只需要O(1)的复杂度
如果使用InnoDB存储引擎,使用O(n)的复杂度
在InnoDB存储引擎中,如果使用Count(具体字段)来统计数据行数,尽量采用二级索引,如果没有二级索引,才使用主键索引来使用
  • SELECT(*)
在表查询中,建议明确字段,不要使用*作为查询的字段列表,推荐使用SELECT<字段列表>查询。原因:
①MySQL在解析的过程中,会通过查询数据字典将"*"按序转换成所有列名,这会大大的耗费资源和时间。
②无法使用覆盖索引
  • LIMIT 1 对优化的影响
针对的是会扫描全表的SQL语句,如果你可以确定结果集只有一条,那么加上LIMIT 1 的时候,当找到一条结果的时候就不会继续扫描了,这样会加快查询速度。
如果数据表已经对字段建立了唯一索引,那么可以通过索引进行查询,不会全表扫描的话,就不需要加上LIMIT 1 了。
  • 多使用COMMIT
只要有可能,在程序中尽量多使用COMMIT,这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少。
COMMIT所释放的资源:
回滚段上用于恢复数据的信息
被程序语句获得的锁
redo/ undo log buffer 中的空间
管理上述3种资源中的内部花费
posted @   DogLeftover  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
历史上的今天:
2021-06-17 jdbc操作mysql(三):利用注解封装
2021-06-17 jdbc操作mysql(二):封装
点击右上角即可分享
微信分享提示