[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, ... ;
[MySQL]select和where子句优化的更多相关文章
- mysql中select五种子句和统计函数
select 五种子句顺序 where 条件 group by 分组 having 把结果进行再次筛选 order by 排序 limit 取出条目 统计函数 max(列名) 求最大 min( ...
- mysql索引的使用和优化
参考: http://blog.csdn.net/xluren/article/details/32746183 http://www.cnblogs.com/hustcat/archive/2009 ...
- mysql笔记03 查询性能优化
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
- MySQL的20条基本优化 加参考资料
mysql的性能优化包罗甚广:索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等.这里的记录的优化技巧更适用于开发人员,都是从网络上收集和自己整理 ...
- mysql SELECT FOUND_ROWS()与COUNT(*)用法区别
在mysql中 FOUND_ROWS()与COUNT(*)都可以统计记录,如果都一样为什么会有两个这样的函数呢,下面我来介绍SELECT FOUND_ROWS()与COUNT(*)用法区别 SEL ...
- php学习之道:mysql SELECT FOUND_ROWS()与COUNT(*)使用方法差别
在mysql中 FOUND_ROWS()与COUNT(*)都能够统计记录.假设都一样为什么会有两个这种函数呢.以下我来介绍SELECT FOUND_ROWS()与COUNT(*)使用方法差别 SELE ...
- MySql学习(七) —— 查询性能优化 深入理解MySql如何执行查询
本篇深入了解查询优化和服务器的内部机制,了解MySql如何执行特定查询,从中也可以知道如何更改查询执行计划,当我们深入理解MySql如何真正地执行查询,明白高效和低效的真正含义,在实际应用中就能扬长避 ...
- 用于 SELECT 和 WHERE 子句的函数
一个 SQL 语句中的 select_expression 或 where_definition 可由任何使用了下面所描述函数的表达式组成. 包含 NULL 的表达式总是得出一个 NULL 值结果,除 ...
- MySQL面试题之如何优化一条有问题的SQL语句?
如何优化一条有问题的sql语句? 针对sql语句的优化.我们可以从如下几个角度去分析 回归到表的设计层面,数据类型选择是否合理 大表碎片的整理是否完善 表的统计信息,是不是准确的 审查表的执行计划,判 ...
随机推荐
- Centos 搭建邮箱系统
总结 我实操的过程,2个邮箱都没有界面,都只是邮件系统.可能还需要再部署其他东西,暂止. sendmail 比较简单,主要是发邮件,使用 stmp.还需要解决收邮件的问题和管理界面的问题. postf ...
- SpringMvc 中的实用工具类介绍(包括 ResponseEntity、 RestTemplate、WebUtils 等)
此部分内容将包含 ResponseEntity. RestTemplate.WebUtils 等 1. ResponseEntity ① Sprring Mvc 中作为方法的返回值使用法 @Reque ...
- verilog中timescale
1. `timescale `timescale是Verilog中的预编译指令,指定位于它后边的module的时间单位和时间精度,直到遇到新的`timescale指令或者`resetall指令.它的语 ...
- Golang Go Go Go part3:数据类型及操作
五.Go 基本类型 1.基本类型种类 布尔值: bool 长度 1字节 取值范围 true, false注意事项:不可用数字代表 true 或 false 整型: int/uint 根据运行平台可能为 ...
- WS_窗口风格常量
WS_窗口风格常量 WS_BODER 窗口具有细线边框 WS_CAPTION 窗口具有标题栏(包含 WS_BODER) WS_CHILD 创建一个子窗口(此风格不能与 WS_POPUP 一起使用 ) ...
- ubuntu tensorflow install(Ubuntu16.04+CUDA9.0+cuDNN7.5+Python3.6+TensorFlow1.5)
在网上找了很多案例,踩了许多坑,感觉比较全面的是下面介绍的 http://www.cnblogs.com/xuliangxing/p/7575586.html 先说说我的步骤: 首先安装了Anacod ...
- TCP协议学习总结(下)
在前两边TCP学习总结中,也大概地学习了TCP的整个流程,但许多细节中的细节并没有详细学习,例如超时重传问题,每次瓶颈回归慢启动效率问题以及最大窗口限制问题等.本学习篇章最要针对这些细节中的细节进行学 ...
- 分布式服务框架介绍:最成熟的开源NIO框架Netty
尽管JDK提供了丰富的NIO类库,网上也有很多NIO学习例程,但是直接使用Java NIO类库想要开发出稳定可靠的通信框架却并非易事,原因如下: 1)NIO的类库和API繁杂,使用麻烦,你需要熟练掌握 ...
- [Swift]LeetCode151. 翻转字符串里的单词 | Reverse Words in a String
Given an input string, reverse the string word by word. Example: Input: "the sky is blue", ...
- [Swift]LeetCode399. 除法求值 | Evaluate Division
Equations are given in the format A / B = k, where A and B are variables represented as strings, and ...