• [MySQL]select和where子句优化


    数据库优化:
    1.可以在单个SQL语句,整个应用程序,单个数据库服务器或多个联网数据库服务器的级别进行优化
    2.数据库性能取决于数据库级别的几个因素,例如表,查询和配置设置
    3.在数据库级别进行优化,在硬件级别进行优化,平衡可移植性和性能
    4.合适的结构,合适的数据类型;执行频繁更新的应用程序大量表(少列);分析大量数据的应用程序少量表(多列);选择合适的存储引擎和索引;
    5.压缩适用于InnoDB表的各种工作负载,以及只读MyISAM表
    6.选择合适的锁定策略;InnoDB存储引擎可以处理大多数锁定问题
    7.配置的主要内存区域是InnoDB缓冲池和MyISAM密钥缓存。
    8.优化select语句,这方面技巧同样适用于其他带where的delete语句等,在where子句的列上设置索引;索引对于引用多个列如join和外键尤其重要

    select where子句优化:
    1.调整查询的结构,例如函数调用,为结果集中的每一行只调用一次,为表中的每一行只调用一次
    2.减少查询中的全表扫描数
    3.定期使用ANALYZE TABLE语句使表统计信息保持最新
    4.了解特定于每个表的存储引擎的调优技术,索引技术和配置参数
    5.优化InnoDB表的单查询事务
    6.通过阅读EXPLAIN计划并调整索引,WHERE子句,连接子句等来调查特定查询的内部详细信息
    7.调整MySQL用于缓存的内存区域的大小和属性。通过有效使用InnoDB缓冲池,MyISAM密钥缓存和MySQL查询缓存
    8.where条件,去掉不必要的括号,恒定折叠,恒定条件去除,减少不必要的逻辑
    9.被索引使用的常量表达式只计算一次
    10.count(*)直接从表信息中查询;当只有一张表时,not null表达式也是这样
    11.如果不使用GROUP BY或聚合函数(COUNT(),MIN()等),HAVING将与WHERE合并
    12.常量表,只有一行或空表;where子句作用在primary key或者unique索引上
    13.如果ORDER BY和GROUP BY子句中的所有列都来自同一个表,则在连接时首选该表
    14.如果order by子句和group by子句不一样,或来自不同的表,则会创建临时表
    15.如果使用SQL_SMALL_RESULT修饰符,MySQL将使用内存中的临时表
    16.MySQL甚至无需咨询数据文件即可只从索引中读取行
    17.在输出每一行之前,将跳过与HAVING子句不匹配的行

    以下表被用作常量表:

    SELECT * FROM t WHERE primary_key=1;
    SELECT * FROM t1,t2
      WHERE t1.primary_key=1 AND t2.primary_key=t1.id;

    以下查询运行速度非常快:

    SELECT COUNT(*) FROM tbl_name;
    
    SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;
    
    SELECT MAX(key_part2) FROM tbl_name
      WHERE key_part1=constant;
    
    SELECT ... FROM tbl_name
      ORDER BY key_part1,key_part2,... LIMIT 10;
    
    SELECT ... FROM tbl_name
      ORDER BY key_part1 DESC, key_part2 DESC, ... LIMIT 10;

    假设索引列是数值型,以下查询仅用到了索引树:

    SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;
    
    SELECT COUNT(*) FROM tbl_name
      WHERE key_part1=val1 AND key_part2=val2;
    
    SELECT key_part2 FROM tbl_name GROUP BY key_part1;

    以下查询使用索引按排序顺序取回数据,不需要单独排序

    SELECT ... FROM tbl_name
      ORDER BY key_part1,key_part2,... ;
    
    SELECT ... FROM tbl_name
      ORDER BY key_part1 DESC, key_part2 DESC, ... ;
  • 相关阅读:
    Redis相关操作指令
    Redis下载及安装(windows版)
    SpringBoot——登录验证码实现
    c++各种输入函数
    福昕阅读器关闭pdf文件后导致其被占用的处理办法
    面试之HTTP协议相关的问题
    在浏览器中输入URL后,执行的全部过程。会用到哪些协议?(一次完整的HTTP请求过程)
    Cookie与Session的原理
    Socket编程
    安全相关的问题、CSRF攻击、怎么确保数据传输中的安全性?
  • 原文地址:https://www.cnblogs.com/taoshihan/p/10287391.html
Copyright © 2020-2023  润新知