首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引Mysql Group BY Query

索引Mysql Group BY Query
EN

Stack Overflow用户
提问于 2015-04-29 10:20:13
回答 2查看 54关注 0票数 0

您好,我有一个名为train_stop的表,它有大约100万行。

我有以下问题-

代码语言:javascript
复制
SELECT * FROM (SELECT * FROM train_stop where code='XYZ' AND active=1 UNION SELECT * FROM train_stop where code='ABC' UNION SELECT * FROM train_stop where code='STU'...... ) AS t3 GROUP BY t3.number order by departs

此查询仅使用相同的表train_stop。首先,我根据code选择某些行,然后按number对其进行分组。我尝试过为不同的列建立索引,但上面的查询总是使用using temporary, using filesort。执行时间大约为几秒钟。请告诉我,是否有更好的方法来编写上面的查询和索引策略,以便在毫秒内优化并获得结果。你的帮助会很有用的。

代码语言:javascript
复制
Create Statement is `CREATE TABLE `train_stop` (
  `number` varchar(1000) NOT NULL,
  `stop_number` int(11) NOT NULL,
  `code` varchar(1000) NOT NULL,
  `station name` varchar(1000) NOT NULL,
  `arrives` time NOT NULL,
  `departs` time NOT NULL,
  `halt` varchar(1000) NOT NULL,
  `pf` varchar(1000) NOT NULL,
  `day` int(11) NOT NULL,
  `km` varchar(1000) NOT NULL,
  `speed` varchar(1000) NOT NULL,
  `elev` varchar(1000) NOT NULL,
  `zone` varchar(1000) NOT NULL,
  `address` varchar(1000) NOT NULL,
  `active` int(11) DEFAULT '1',
  KEY `index_1` (`number`(767),`code`(767)),
  KEY `PIndex` (`number`(767),`stop_number`),
  KEY `three_columns_idx` (`code`(767),`active`,`departs`),
  KEY `two_columns_idx` (`code`(767),`active`),
  KEY `two_columns_group_idx` (`number`(767),`departs`),
  KEY `one_columns_group_idx` (`departs`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1`
EN

回答 2

Stack Overflow用户

发布于 2015-04-29 10:49:43

我认为您的查询为每个子查询遍历整个表一次,这就是您的瓶颈。请试一下这件

代码语言:javascript
复制
SELECT * FROM train_stop where (code='XYZ' AND active=1) OR (code='ABC') OR (code='STU') ...
Group by number order by departs

对于您的查询使用GROUP BY语句,我认为您不能写select *,请缩小选择短语!

票数 0
EN

Stack Overflow用户

发布于 2015-04-29 11:31:00

删除并集并使用OR。由于某些原因,如果order by和group by放在一起,它将不会得到您期望的行。而应首先在子查询内对其进行排序,并在查询结束时对其进行分组

像这样的东西

代码语言:javascript
复制
SELECT * FROM (SELECT * FROM train_stop where (code='XYZ' AND active=1)
OR (code='ABC') OR (code='STU') ... ORDER BY departs ASC) AS t3 GROUP BY 
t3.number

决定你想要的是升序还是降序

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29933229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档