[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语句的优化.我们可以从如下几个角度去分析 回归到表的设计层面,数据类型选择是否合理 大表碎片的整理是否完善 表的统计信息,是不是准确的 审查表的执行计划,判 ...
随机推荐
- 20175324 2018-2019-2 《Java程序设计》第8周学习总结
本周学习<Java程序设计>第十五章: 泛型: 泛型(Generics)的主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据结构. 泛型类声明:class 名称<泛型列 ...
- 【原创】XAF CriteriaOperator 使用方式汇总
1.CriteriaPropertyEditor [EditorAlias(EditorAliases.CriteriaPropertyEditor)] [CriteriaOptions(" ...
- Winform 窗体获得焦点
给窗体添加Shown事件 public void Form_Shown(object sender, EventArgs e) { this.Activate(); this.Focus(); //定 ...
- CROS+node-basis+ajax
$.ajax({ url: this.baseUrl + this.restful.showDesigerViewList, type: "post", dataType: &qu ...
- 网页开发--03(wampserver安装服务无法启动的问题)
一.安装wampserver 一路next,指定安装路径外,其它默认安装. 二.我遇到的问题 当任务图标绿色为正常启动状态,但是我的从打开一直是黄色,问题在于Apache和MySql 1)Apache ...
- Mesos源码分析(11): Mesos-Master接收到launchTasks消息
根据Mesos源码分析(6): Mesos Master的初始化中的代码分析,当Mesos-Master接收到launchTask消息的时候,会调用Master::launchTasks函数. v ...
- Python学习笔记【Nginx】:Nginx使用与完全卸载
安装与启动nginx 第一步:通过指令安装包 sudo apt install nginx sudo apt install nginx 第二步:安装成功后查看相关配置文件 ls /etc/n ...
- [Swift]LeetCode91. 解码方法 | Decode Ways
A message containing letters from A-Z is being encoded to numbers using the following mapping: 'A' - ...
- Markdown语法及html内嵌
目录 1.Markdown介绍 2.Markdown语法介绍 3.内嵌html语法 之前看到很多大佬博客写的特别漂亮,非常羡慕,他们是怎么排版的呢?作为一个小白,学习使我快乐....终于在不断摸索 ...
- 【Spark篇】---SparkStreaming+Kafka的两种模式receiver模式和Direct模式
一.前述 SparkStreamin是流式问题的解决的代表,一般结合kafka使用,所以本文着重讲解sparkStreaming+kafka两种模式. 二.具体 1.Receiver模式 原理图 ...