|搞懂这些SQL优化技巧,面试横着走( 五 )
【|搞懂这些SQL优化技巧,面试横着走】如果希望所有支持 LOW_PRIORITY 选项的语句都默认地按照低优先级来处理 , 那么请使用--low-priority-updates 选项来启动服务器 。
通过使用 INSERTHIGH_PRIORITY 来把 INSERT 语句提高到正常的写入优先级 , 可以消除该选项对单个 INSERT 语句的影响 。
查询条件优化
①对于复杂的查询 , 可以使用中间临时表暂存数据
②优化 group by 语句
默认情况下 , MySQL 会对 GROUP BY 分组的所有值进行排序 , 如 “GROUP BY col1 , col2 , ....;” 查询的方法如同在查询中指定 “ORDER BY col1 , col2 , ...;”。
如果显式包括一个包含相同的列的 ORDER BY 子句 , MySQL 可以毫不减速地对它进行优化 , 尽管仍然进行排序 。
因此 , 如果查询包括 GROUP BY 但你并不想对分组的值进行排序 , 你可以指定 ORDER BY NULL 禁止排序 。
例如:
SELECT col1, col2, COUNT(*) FROM table GROUP BY col1, col2 ORDER BY NULL ; ③优化 join 语句
MySQL 中可以通过子查询来使用 SELECT 语句来创建一个单列的查询结果 , 然后把这个结果作为过滤条件用在另一个查询中 。
使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的 SQL 操作 , 同时也可以避免事务或者表锁死 , 并且写起来也很容易 。 但是 , 有些情况下 , 子查询可以被更有效率的连接(JOIN)..替代 。
例子:假设要将所有没有订单记录的用户取出来 , 可以用下面这个查询完成:
ELECT col1 FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo ) 如果使用连接(JOIN)..来完成这个查询工作 , 速度将会有所提升 。
尤其是当 salesinfo 表中对 CustomerID 建有索引的话 , 性能将会更好 , 查询如下:
SELECT col1 FROM customerinfo LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.CustomerID WHERE salesinfo.CustomerID IS NULL连接(JOIN)..之所以更有效率一些 , 是因为 MySQL 不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作 。
④优化 union 查询
MySQL 通过创建并填充临时表的方式来执行 union 查询 。 除非确实要消除重复的行 , 否则建议使用 union all 。
原因在于如果没有 all 这个关键词 , MySQL 会给临时表加上 distinct 选项 , 这会导致对整个临时表的数据做唯一性校验 , 这样做的消耗相当高 。
高效:
ELECT COL1, COL2, COL3 FROM TABLE WHERE COL1 = 10 UNION ALL SELECT COL1, COL2, COL3 FROM TABLE WHERE COL3= 'TEST';低效:
SELECT COL1, COL2, COL3 FROM TABLE WHERE COL1 = 10 UNION SELECT COL1, COL2, COL3 FROM TABLE WHERE COL3= 'TEST';⑤拆分复杂 SQL 为多个小 SQL , 避免大事务
如下:
- 简单的 SQL 容易使用到 MySQL 的 QUERY CACHE 。
- 减少锁表时间特别是使用 MyISAM 存储引擎的表 。
- 可以使用多核 CPU 。
当删除全表中记录时 , 使用 delete 语句的操作会被记录到 undo 块中 , 删除记录也记录 binlog 。
当确认需要删除全表时 , 会产生很大量的 binlog 并占用大量的 undo 数据块 , 此时既没有很好的效率也占用了大量的资源 。
使用 truncate 替代 , 不会记录可恢复的信息 , 数据不能被恢复 。 也因此使用 truncate 操作有其极少的资源占用与极快的时间 。 另外 , 使用 truncate 可以回收表的水位 , 使自增字段值归零 。
⑦使用合理的分页方式以提高分页效率
使用合理的分页方式以提高分页效率 针对展现等分页需求 , 合适的分页方式能够提高分页的效率 。
推荐阅读
- 管理者|高水平的管理者都遵守的6条管理圣经,读懂这些,管理越来越顺
- 行业互联网|这些企业家点赞“青春之岛”!亚布力中国企业家论坛夏季峰会企业家座谈会在青举行
- 阿里巴巴|高水平的管理者都遵守的6条管理圣经,读懂这些,管理越来越顺
- AMD|又要性价比又要稳定?这些B450主板给你答案
- 中年|什么是余压监控系统?余压监控系统如何接线和安装?一篇文章搞懂
- 智能电视|《以家人之名》温情来袭,来康康这些细节打动你了吗?
- 群众网|微信打开这个功能,这些年你去过的地方都能看得一清二楚!
- 互联网|这些企业被评为我市电子商务示范企业!
- 深圳|除了腾讯华为,深圳这些“宝藏”公司你得知道!
- 科学|地球产生生命充满了巧合,这些巧合或是被“人为”刻意安排的