MySQL系列(二):SQL优化

SQL优化角度:



SQL语句的优化:

  1. 查询的目标字段,数据范围越明确越好
  2. 避免在where中出现表达式操作,会导致引擎放弃索引
  3. 避免数据类型转化,如果目标数据是int在写SQL语句的时候就不要传入varchar
  4. 注意范围查询语句,会导致后面的索引字段失效
  5. 单独查询的时候,使用limit1,这是为了使EXPLAIN中type列达到const类型
  6. 多表查询的时候,尽量避免笛卡尔积
  7. 海量数据查询的时候,通过程序拆分为分段查询,进行批处理后将最后的结果合并
  8. 海量数据查询返回的时候,分页显示
  9. 查询避免判空和不等于操作,会造成引擎放弃索引全表扫描
  10. 区分好IN和EXISTS
    IN和EXISTS驱动顺序不一样,IN是先执行子查询,而EXISTS是先执行外查询
    IN适合内表小外表大的情况,EXISTS适合外表小内表大的情况
  11. 对于连续数据集,能够用BETWEEN的不用IN,如果要用IN保持数据集的有序性和少数性
  12. 避免使用NOT IN,可能存在逻辑问题,尽量用NOT EXISTS来代替
    查询A表中不在B表的数据
    select column from tablea left join tableb where A.id = B.id and B.id = null
  13. 避免使用or
  14. 避免左模糊 like '%XX'查询
  15. 避免* ,会造成全表扫描,浪费系统资源
  16. 如果排序的目标字段没有索引,尽量减少排序的使用

数据库表的设计:

1.字段设计的时候尽量是数字型的,如果是字符型的数据在查询的时候需要逐个比较
2.新建索引:索引的建立需要慎重,不正确的索引只会增加存储数据处理的开销
  • 主键外键必有索引
  • 数据量超过300的表应该有索引
  • 经常需要进行连接操作的表,在连接字段上应该建立索引
  • 经常出现在Where中的字段应该建立索引

缓存:

  • 开启MySQL的一二级缓存
  • 添加Redis的缓存层

分库分表

  • 将历史数据保存到另一个数据库中



全部评论

相关推荐

04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
牛客517626884号:嵌入式真难啊今年,我电赛国二都成了路边野狗了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务