| # 大表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(1)都是统计表的所有数量,效率差别不大 |
| 如果使用MyISAM存储引擎,统计数据表的行数只需要O(1)的复杂度 |
| 如果使用InnoDB存储引擎,使用O(n)的复杂度 |
| 在InnoDB存储引擎中,如果使用Count(具体字段)来统计数据行数,尽量采用二级索引,如果没有二级索引,才使用主键索引来使用 |
| 在表查询中,建议明确字段,不要使用*作为查询的字段列表,推荐使用SELECT<字段列表>查询。原因: |
| ①MySQL在解析的过程中,会通过查询数据字典将"*"按序转换成所有列名,这会大大的耗费资源和时间。 |
| ②无法使用覆盖索引 |
| 针对的是会扫描全表的SQL语句,如果你可以确定结果集只有一条,那么加上LIMIT 1 的时候,当找到一条结果的时候就不会继续扫描了,这样会加快查询速度。 |
| |
| 如果数据表已经对字段建立了唯一索引,那么可以通过索引进行查询,不会全表扫描的话,就不需要加上LIMIT 1 了。 |
| 只要有可能,在程序中尽量多使用COMMIT,这样程序的性能得到提高,需求也会因为COMMIT所释放的资源而减少。 |
| |
| COMMIT所释放的资源: |
| 回滚段上用于恢复数据的信息 |
| 被程序语句获得的锁 |
| redo/ undo log buffer 中的空间 |
| 管理上述3种资源中的内部花费 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
2021-06-17 jdbc操作mysql(三):利用注解封装
2021-06-17 jdbc操作mysql(二):封装