我有一个表和一个如下所示的查询.有关工作示例,请参阅此

SQL Fiddle.

SELECT o.property_B, SUM(o.score1), w.score

FROM o

INNER JOIN

(

SELECT o.property_B, SUM(o.score2) AS score FROM o GROUP BY property_B

) w ON w.property_B = o.property_B

WHERE o.property_A = 'specific_A'

GROUP BY property_B;

使用我的真实数据,此查询需要27秒.但是,如果我首先创建w作为临时表和索引property_B,它们总共需要约1秒.

CREATE TEMPORARY TABLE w AS

SELECT o.property_B, SUM(o.score2) AS score FROM o GROUP BY property_B;

ALTER TABLE w ADD INDEX `property_B_idx` (property_B);

SELECT o.property_B, SUM(o.score1), w.score

FROM o

INNER JOIN w ON w.property_B = o.property_B

WHERE o.property_A = 'specific_A'

GROUP BY property_B;

DROP TABLE IF EXISTS w;

有没有办法结合这两个查询中最好的?即单个查询具有子查询中索引的速度优势?

编辑

在下面的Mehran回答之后,我在MySQL documentation中读到了这条解释:

从MySQL 5.6.3开始,优化器可以更有效地处理FROM子句中的子查询(即派生表):

对于FROM子句中子查询需要实现的情况,优化器可以通过向实现表添加索引来加快对结果的访问.如果这样的索引允许对表进行ref访问,则可以大大减少在查询执行期间必须读取的数据量.请考虑以下查询:

SELECT * FROM t1

JOIN (SELECT * FROM t2) AS derived_t2 ON t1.f1=derived_t2.f1;

优化程序在derived_t2的列f1上构造索引,如果这样做,则允许对最低成本的执行计划使用ref访问.添加索引后,优化程序可以将具体化派生表视为与具有索引的常规表相同,并且它与生成的索引类似.与没有索引的查询执行成本相比,索引创建的开销可以忽略不计.如果ref访问会导致比其他访问方法更高的成本,则不会创建任何索引,并且优化程序也不会丢失任何内容.

mysql 子查询添加索引_mysql – 你能索引子查询吗?相关推荐

  1. mysql 唯一索引_MySQL学会用索引,让你数据库的查询速度起飞

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度.打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一 ...

  2. MySQL第九章索引_MySQL高级(索引优化+慢查询定位)

    一.先谈谈事务 1. ACID特性 1.1 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用: 1.2 一致性: 执行事务前后,数据库从一个一致性状态转换 ...

  3. mysql repair 索引_mysql 问题记录(1) 全文索引查询问题及使用方法

    问题描述:使用全文索引,查询某些单词,比如beijing,of,to,also等等.查询失败... 测试表结构: 测试表数据: 查询失败分析: 1."beijing"查询失败,是因 ...

  4. mysql查询中怎样使用索引_MySQL如何使用索引

    初始化测试数据 创建一个测试用的表 create tabledept( idint primary keyauto_increment , deptNamevarchar(32) not null u ...

  5. mysql如何批量删除索引_mysql执行大批量删除、查询和索引等操作教程

    mysql执行大批量删除 执行大批量删除的时候注意要使用上limit 因为如果不用limit,删除大量数据很有可能造成死锁 如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数 ...

  6. mysql 分表索引_mysql中,分表查询和索引查询哪个更快?

    谢谢邀请! 查询快慢主决的因素有很多,存储碎片.数据量大属于I/O类问题:表结构设计.查询语句属于技术是否熟练(经验)问题.对于你的分表快还是索引快的这个问题本身就是有问题的: 在建立数据表的时候,索 ...

  7. mysql优化和索引_mysql优化和索引

    表的优化 1.定长与变长分离 如 int,char(4),time核心且常用字段,建成定长,放在一张表: 而varchar,text,blob这种变长字段适合单放一张表,用主键与核心表关联. 2.常用 ...

  8. mysql 制定索引_mysql的最佳索引攻略

    > 本设计和优化专题转自博客园的[Mysql的设计和优化专题](http://www.cnblogs.com/nixi8/) ## Explain优化查询检测 所谓索引就是为特定的mysql字段 ...

  9. mysql如何创建简单索引_mysql 如何创建索引呢,这个其实很简单

    mysql 如何创建索引? mysql 如何创建索引呢,这个其实很简单 create index或者为己有字段增加索引 ALTER TABLE `table_name` ADD UNIQUE (`co ...

最新文章

  1. 大话Web-Audio-Api
  2. 喜报!神策数据入选“中国科创企业百强榜”前 3 名
  3. dp主机_HDMI和DP谁才是未来主流?
  4. kvmweb管理工具_KVM web管理工具——WebVirtMgr(一)
  5. Keras-7 Reuters, a multiclass classification example
  6. Tomcat服务器搭建及测试教程(1),腾讯技术官发布的“神仙文档”火爆网络
  7. oracle清空回收站指定表,清空Oracle 10g回收站中以BIN$开头的表
  8. 表格制作模块xlwt
  9. visio反向工程 mysql_Visio 2010对MySQL数据库反向工程生成ER数据库模型图
  10. java编写蠕虫病毒_网络蠕虫病毒代码分析
  11. 力软java版_力软未来产品发展方向
  12. 学会计为什么要学计算机基础,会计专业学生为什么要学数据库
  13. SpringMVC项目报错500的可能解决方法
  14. 不用安装Wincap程序实现ARP广播包的发送和接收
  15. 阿里云ace考试内容是什么?
  16. Worktile 中百万级实时消息推送服务的实现
  17. iphone换android手机铃声,在iPhone中换个自定义铃声要11个步骤 正常人受不了
  18. BZOJ.4598.[SDOI2016]模式字符串(点分治 Hash)
  19. iOS 沙盒路径/创建文件夹
  20. 华为u8825d手机root和google play安装有教程和相关文件

热门文章

  1. 文化氛围对新人培养新人的影响
  2. 连接器篇(二) 高频系列
  3. 基于 Module 的 Laravel API 架构
  4. 【技术短文】基于深度负相关学习的人群计数方法
  5. Bzoj4817:[SDOI2017]树点涂色
  6. 恶意网址提醒服务见实效
  7. 【STSRM13】绵津见
  8. 几个有用的eclipse插件安装地址
  9. TCP的拥塞控制(详解)
  10. lwip之数据收发流程_3