从五个方面逐步完成SQL语句的优化

SQL语句的优化

  1. 查询剖析工具,去了解是查询语句的哪一部分导致了查询缓慢。
    (1) 查询单行或者少数行语句时使用,使用SHOW PROFILES:先在navicat的命令行中,设置SET profiling=1。通过设置这个属性以后,但凡是在服务器上执行的所有语句,都会测量这个语句的耗费时间和查询执行过程中转台变换的过程中等一系列相关的数据。 然后再执行查询语句。再使用SHOW PROFILES;可以查看到刚刚执行的查询语句所使用的响应时间。当想要仔细查看某一条查询语句内部所有的响应时间细节时,使用SHOW PROFILE FOR QUERY_ID #id;
    (2) 查询大量数据时使用:开启慢查询日志; 先通过show variables like ‘%query%’;来查看慢查询日志是否开启,如果未开启,通过set slow_query_log = ON;设置为开启;然后可以将慢查询日志输出到表中(即mysql.slow_log)set global log_output=’TABLE’;MemoryAnalyzer进行查看。
  2. 首先从数据字段的数据类型优化开始
    (1) 在数据字段类型的选择过程中,尽量选择更小的类型。然后将一些经常被查询到的列设置为not null,这是因为允许为null 的列往往难以优化,会使得索引、索引统计和值的比较都变得复杂。当一个列即被设置为索引,又被设置为允许为null时,对于每个索引记录都需要一个额外的字节。
    (2) 范式和反范式设计之间做抉择。范式表的好处是,存在的重复数据少,占用内存更小,但是需要频繁的进行表与表之间的关联操作。反范式表的好处是可以避免关联,但是重复的数据就会更多。所以可以混用
  3. 索引优化
    (1) 独立的列:也就是说索引不能是表达式的一部分,也不能是函数的参数
    (2) 选择能够使得索引选择性足够高的长度来作为前缀索引。前缀索引的缺点是无法使用前缀索引做ORDER BY 和 GROUP BY,也无法使用前缀索引 做覆盖扫描。
    (3) 充分考虑了索引顺序的多列索引:
    (4) 聚簇索引。InnoDB中通过主键作为聚簇索引,把数据行放在索引的叶子节点中。可以使数据访问更快
    (5) 覆盖索引:一个索引包含(或者说覆盖)所有需要查询的字段值,那么查询只需要扫描而不需要进行回表;
  4. 主从复制,读写分离
  5. 垂直拆分、水平拆分
    (1) 垂直拆分:根据模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统
    (2) 水平拆分:针对数据量大的表,选择一个合理的sharding key,为了有更好的查询效率,表结构也要改动,做一定的冗余。Sql中尽量带sharding key,将数据定位到表上差,而不是扫描全部的表。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值