8.2.1.17 DISTINCT Optimization
2015-10-23 10:42
246 查看
8.2.1.17 DISTINCT Optimization
DISTINCT 结合ORDER BY 需要一个临时表在很多情况下:
因为DISTINCT 可能使用GROUP BY, 了解MySQL 和列在ORDER BY 或者HAVING 子句
不是SELECT 的列
在大多数情况下,一个DISTINCT 子句可以被认为一个特定GROUP BY 的例子,比如,下面两个查询是等价:
SELECT DISTINCT c1, c2, c3 FROM t1
WHERE c1 > const;
SELECT c1, c2, c3 FROM t1
WHERE c1 > const GROUP BY c1, c2, c3;
由于这种等价, 优化应用于GROUP BY 查询可以应用于DISTINCT 查询。
当结合LIMIT row_count 和DISTINCT, MySQL 停止当找到row_count 唯一的行就停止
ruguo9你不使用 从查询的所有表的列, MySQL 停止扫描任何不使用的表 只要它找到第一个匹配。
在下面的例子,架设 t1是在t2前使用( 你可以通过EXPLAIN检查)
MySQL 停止从t2读取
SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;
DISTINCT 结合ORDER BY 需要一个临时表在很多情况下:
因为DISTINCT 可能使用GROUP BY, 了解MySQL 和列在ORDER BY 或者HAVING 子句
不是SELECT 的列
在大多数情况下,一个DISTINCT 子句可以被认为一个特定GROUP BY 的例子,比如,下面两个查询是等价:
SELECT DISTINCT c1, c2, c3 FROM t1
WHERE c1 > const;
SELECT c1, c2, c3 FROM t1
WHERE c1 > const GROUP BY c1, c2, c3;
由于这种等价, 优化应用于GROUP BY 查询可以应用于DISTINCT 查询。
当结合LIMIT row_count 和DISTINCT, MySQL 停止当找到row_count 唯一的行就停止
ruguo9你不使用 从查询的所有表的列, MySQL 停止扫描任何不使用的表 只要它找到第一个匹配。
在下面的例子,架设 t1是在t2前使用( 你可以通过EXPLAIN检查)
MySQL 停止从t2读取
SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;
相关文章推荐
- redhat6.4日常操作规范
- 解决linux buffer/cache 消耗内存过高引发的问题 推荐
- hadoop2.6.1源码编译
- shell脚本read传递参数
- Apache Avro 介绍
- 关于scrollTop
- Ubuntu LinuxCNC2.5升级到2.6方法
- windows 7系统安装与配置Tomcat服务器环境
- 转:华 为 路 由 常 用 命 令
- 企业软件,路在何方?
- centos 配置IP和解除自动待机休眠
- Windows+Apache+MySQL+PHP(WAMP)环境搭建
- 多层文件夹内文件遍历函数
- Linux HA Cluster概述
- Nginx 无法启动,pid=4占用80端口
- 10月20日全球域名商解析新增量TOP15:万网第三
- linux系统不同对象升级方法详细介绍
- linux下的myql安装详解
- CentOS 6.6系统安装配置图文教程
- .wang域名总量TOP15:易名中国问鼎 份额54.24%