zoukankan      html  css  js  c++  java
  • 8.2.1-优化SELECT语句

    8.2.1.优化 SELECT 语句

    由SELECT 语句组成的查询,在数据中执行所有的查询.对这类语句的调优排在首位,无论是调优动态web网页的二级响应时间,还是减少
    生成巨大隔夜报告的时间.

    而且,对SELECT语句调优的技术同样适用 CREATE TABLE...AS SELECT, INSERT INTO...SELECT,DELETE 中带有where的语句.
    这些语句还有其他的性能开销,因为这些操作在读操作的时候也进行写操作.

    MySQL Cluster 支持join pushdown优化,join 操作会被发送实际的MySQL Cluster 数据结点,这样可以分布join操作来达到并行操作.

    更多关于此优化的信息,查看 Conditions for NDB pushdown joins.

    加快 SELECT 语句

    优化查询的主要方法有:

    1.为了让慢的SELECT ... WHERE 查询变快,首要做的事是检查你是否能够加一个索引.在where 语句中使用到的列上加索引,能加快预估,过滤
        和最后取回结果的速度.为避免浪费磁盘空间,构建一个小的索引来加快你应用程序中大多数相关的查询.

          索引对于引用其他的表的查询也很重要,比如使用类似 joins,foreign keys的查询.你可以使用EXPLAN 语句来查看SELECT语句使用了哪个索引.
          查看Section 8.3.1,"How MySQL Uses Indexes" 和 Section 8.8.1,"Optimizing Queries with EXPLAIN"

    2.分离,调整查询的各个子部分,比如函数调用会花费许多的时间.一个函数会对结果集中每行都调用一次,或者对表中的所有行只调用一次---这能大幅度提升效率,
    这取决于查询的组成.

    3.让全表查询最小化,特别是对于大数据表.

    4.周期执行ANALYZE TABLE 语句保持表统计信息最新,这样优化器才有足够的信息去生成高效的执行计划

    5.学习调优技术,索引相关技术,和存储引擎的配置参数.InnoDB和MyISAM都有系列手册让查询高效执行.
    更多信息,查看 Section 8.5.6,"Optimizing InnoDB Querire" 和 Section 8.6.1,"Optimizing MyISAM Queries".

    6.通常,在MySQL5.6.4和更高版本中,你能够通过只读事务来优化InnoDB数据表的单个查询事务.Section 8.5.3,"Optimizing InnoDB Read-Only Transactions"

    7.避免转换会让查询语句变成难以理解,特别是优化器会进行同样的转换时.

    8.如果通过基础手册很难解决性能问题,阅读EXPLAN 执行计划的输出,深入内部详情,调整你的索引(where 语句,join语句).
    如果你的技艺已经很高超,阅读执行计划或许是你的优化每个查询的第一步

    9.调整MySQL用于缓存的内存大小.有效的使用InnoDB buffer pool,MySIAM key cache,和MySQL查询缓存,重复执行查询比较快,因为在第一次查询后,结果都从从内存中取回(MySQL自身的查询缓存).

    10.即使一个查询使用缓存已经运行的够快,你或许会继续优化让它使用更少的空间来缓存,让你的程序更具有可扩展性。可扩展性意味你的程序可以同时容纳更多的用户,
    更大的请求,但是不会有太大的性能落差。

    11.处理锁问题,你的查询速度可能会被其他正在同一时间使用表的会话影响.

  • 相关阅读:
    软件配置管理
    VS2008单元测试之NUnit集成与应用(转)
    说说委托,匿名委托,Lamda表达式
    六种方式实现hibernate查询
    AjaxControl验证占位问题
    UL+Li常用效果
    Linq 方法表
    让枚举成员显示出中文信息(转)
    Linq to SQL 插入和获取ID
    正则表达式收集
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/9867955.html
Copyright © 2011-2022 走看看