[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, ... ;
上一篇: [Go] 使用go语言解决现代编程难题
推荐阅读
-
MySQL复制和性能优化
-
精确度分析MySQL数据库中优化WHERE子句_MySQL
-
Mysql5.5数据库的MyISAM和InnoDB引擎配置优化
-
mysql SELECT查询的速度优化详解
-
数据库优化<二>SQL优化之SELECT优化 ――_MySQL
-
MySQL优化之延迟索引和分页优化
-
浅谈mysql配置优化和sql语句优化
-
Mysql中where、group by、having、Order by和limit五种子句使用介绍
-
MySQL 联合索引与Where子句的优化 提高数据库运行效率
-
UCenter info: MySQL Query Error SQL:SELECT value FROM [Table]vars WHERE noteexists