zoukankan      html  css  js  c++  java
  • MySQL---查询性能优化

    2.查询性能优化

    使用Explain进行分析

    Explain用来分析select查询语句,开发人员可以通过分析Explain结果来优化查询结果。

    比较重要的字段有:

    • select_type:查询类型,有简单查询,联合查询,子查询等。
    • key:使用的索引。
    • rows:扫描的行数

    优化数据访问量

    1.减少请求的数据量
    • 只返回必要的列:最好不要使用select*
    • 只返回必要的行:使用limit语句来限制返回的数据
    • 缓存重复查询的数据:使用缓存可以避免在数据库中进行查询,特别在要查询的数据经常被重复查询时,缓存带来的查询性能提升将是非常明显的。
    2.减少服务器端扫描的行数

      最有效的方法是使用索引来覆盖查询

    重构查询方式

    1.切分大查询

      一个大查询如果一次性执行的话,可能一次锁住很多的数据,占满整个事务日志,耗尽系统资源,阻塞很多小的但是重要的查询。

    2.分解大连接查询

      将一个大连接查询,分解成对每一个表进行一次单表查询,然后在应用程序中进行关联,这样做的好处是:

    • 让缓存更高效。对于连接查询,如果其中一个表发生变化,那么整个查询缓存就无法使用。而分解后的多个查询,即使其中一个表发生变化,对其他表的查询缓存依然可以使用。
    • 分解成多个单表查询,这些单表查询的缓存结果更可能被其他查询用到,从而减小了冗余记录的查询
    • 在应用层进行连接,更加容易对数据库进行拆分,从而更容易做到高性能和可伸缩。
    • 查询本身效率也可能会有所提升。例如下面的例子中,使用 IN() 代替连接查询,可以让 MySQL 按照 ID 顺序进行查询,这可能比随机的连接要更高效。
    SELECT * FROM tab
    JOIN tag_post ON tag_post.tag_id=tag.id
    JOIN post ON tag_post.post_id=post.id
    WHERE tag.tag='mysql';
    SELECT * FROM tag WHERE tag='mysql';
    SELECT * FROM tag_post WHERE tag_id=1234;
    SELECT * FROM post WHERE post.id IN (123,456,567,9098,8904);
    
  • 相关阅读:
    update condition 字段报错
    Xshell连接Linux服务器总掉线
    sleep php函数
    ubuntu 16.04 镜像下载
    多线程Parallel和Task
    AngularJS 时间格式化
    正则表达式
    手机抓包
    内存泄漏
    字符集编码和排列规则
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11133392.html
Copyright © 2011-2022 走看看