目录

SQL优化

MYSQL优化经验

  • 比较浅的层面上。
  • 首先我们对这个查询去进行一些优化,要避免这些全表的一个扫描嘛,首先就是考虑到我们的where还有我们的order by , 这些设计的这些列上面去建立这个索引,就是我们要去避免在where子句中呢,去使用到这些!=或者说>、<这些操作符啊,否则我们的引擎呢,将会放弃使用我们的索引呢,也就是最左原则, 然后去进行我们的一个全表扫描,然后也要尽量的使用我们的一些,数字型的一些字段,如果我们只是含这些数值类型的字段的话, 尽量不要设置为这个字符型,这样会降低我们的一个查询,和我们的性能的一个,我们连接的一个性能嘛, 然后也会增加我们的一个存储开销,这个是因为引擎在我们的处理查询和连接的, 这会呢会逐个去比较我们的一个字符串中一个,每个字符嘛,然后对我们的这个数字型的话呢,就是只需要比较一次就够了, 然后我在学习的时候呢,我们老师有建议我不要使用到我们的select * from ,用这个具体的这个字列,去代表我们的*, 然后是不要去返回我们用不到的这些任何字段,然后避免我们这个频繁的创建和删除我们的一个临时表,以使用来减少我们这个系统表资源的这个消耗。
  • 也要尽量少用我们的这个in关键字,可以通过我们的left join呢, 或者其他关键字去取代,然后像我们的数据库服务器集群嘛, 然后我们读写分离啊,如果对数据不经常更新,然后查询方式比较固定的这些情况下呢,可以修改我们的数据库的这个配置文件, 然后去实现我们的一个查询缓存,JVM也有做一些简单的垃圾的一个收集器,还有我们禁用类验证的一些调优, 这些都是有做过一些性能还有压力测试的一些功能的一些工具,然后去测试分析过。

如何判断SQL查询中是否使用了索引?

首先查找到SQL的瓶颈,MySQL使用explain,查看里面的type(数据访问),ALL全表、index索引、range范围

优化:

  • 例如一个业务场景特别慢,先执行这个慢SQL,使用explain,分析常见场景,在where里面有针对性的为他创建索引,使查询都走这个索引,然后具体分析。

/img/SQL优化/1.png