SQL 优化最容易被问到的几点!!

1. 在表中建立索引,优先考虑 where group by 使用到的字段。
2. 查询时尽量避免使用 select *,只查询需要用到的字段。
3. 避免在 where 子句中使用关键字两边都是%的模糊查询,尽量在关键字后使用模糊查询。
4. 尽量避免在 where 子句中使用 IN 和 NOTIN 。 优化:能使用 between 就不用 in 在子查询中使用 exists 子句
5. 尽量避免使用 or ,优化:可以用 union 代替 or 。
6. 尽量避免在 where 子句中使用表达式操作。
7. 尽量避免在 where 子句中使用 null 判断,优化:给字段添加默认值,对默认值判断。
8. 尽量不要在 where 条件中等号的左侧进行表达式.函数操作。
9. 尽量避免使用 where 1=1,优化:用代码拼接 sql ,需要 where 的地方加 where ,需要 and 的地方加 and
10. 尽量避免大事务操作,提高并发能力。
11. 一个表中的索引最好不要超过6个。
12. 应尽量避免在 where 子句中使用 != 或 <>。
13. 在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个。字段作为条件时 才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
14. Update 语句,如果只更改1、2个字段,不要 Update 全部字段,否则频繁调用会引起明显的性能消耗,同时 带来大量日志。
15. 对于多张大数据量(这里几百条就算大了)的表 JOIN ,要先分⻚再 JOIN ,否则逻辑读会很高,性能很差。
16. 尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连 接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够 了。
17. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。游标的一 个常⻅用途就是保存查询结果,以便以后使用。游标的结果集是由 SELECT 语句产生,如果处理过程需要重复使用一个记录集,那么创建一次游标而重复使用 若干次,比重复查询数据库要快的多。
18. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
19. 什么时候【要】创建索引?
表经常进行 SELECT 操作。 表很大(记录超多),记录内容分布范围很广。 列名经常在 WHERE 子句或连接条件中出现。
什么时候【不要】创建索引?
表经常进行 INSERT / UPDATE / DELETE 操作。 表很小(记录超少)。 列名不经常作为连接条件或出现在 WHERE 子句中。
20. 索引优缺点:
索引加快数据库的检索速度。
索引降低了插入、删除、修改等维护任务的速度。
唯一索引可以确保每一行数据的唯一性,通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性
能。
索引需要占物理和数据空间,另外虽然索引可以提高查询速度,但是它们也会导致数据库系统更新数据的性能下降,因为大部分数据更新需要同时更新索引。

回复

共1条回复 我来回复
  • 1059007705
    1059007705
    稍等伙伴们,思考简介中~
    评论

    第15条,先分⻚再 JOIN,如果筛选出来的记录没有达到pagesize怎么办

    3个月前 1条评论
    • 2022-02-10 10:33:23

      个人理解这个就要看实际情况了,一般情况是可以达到pagesize 的,如果遇到达不到pagesize的情况,可以根据判断动态设定pagesize+n的大小,然后截取想要的pagesize即可!

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部