Php 按查询索引Mysql组

Php 按查询索引Mysql组,php,mysql,Php,Mysql,嗨,我有一张叫train_stop的桌子,大约有100万行 我有以下疑问- 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 depa

嗨,我有一张叫train_stop的桌子,大约有100万行

我有以下疑问-

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\u stop。首先,我根据代码选择某些行,然后按编号将其分组。我尝试过为不同的列建立索引,但上面的查询总是使用临时的,使用文件排序。执行时间为秒数。请告诉我是否有更好的方法来编写上述查询和索引策略,以便在毫秒内进行优化并获得结果。你的帮助将非常有用

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`

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

SELECT * FROM train_stop where (code='XYZ' AND active=1) OR (code='ABC') OR (code='STU') ...
Group by number order by departs

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

取下接头并使用或。出于某种原因,如果order by和group by在一起,它将无法获得您所期望的行。而是先在子查询中对其排序,然后在查询结束时按分组

像这样的

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

通过升序还是降序来决定离开的顺序

,以便发布CREATE TABLE语句查询?您的服务器是MySQL还是MS SQL?您只需选择一个并标记它,只需稍微研究一下您的查询。你在这里干什么???为什么你要多次联合表格本身????为什么你只发布部分查询?如果你需要帮助,你应该发布完整的查询。谁创建了这个表结构???为什么“number”varchar1000不为空,??你知道这是什么意思吗?varchar1000是一把巨大的钥匙!!!谁需要那个?有些绳子的长度更长。所以我用了varchar1000。现在如果我用马哈茂德解释的方式写这个查询。Code='XYZ'或Code='ABC'…现在XYZ和ABC都存在,但我只希望第一个选择器XYZ出现在结果中。但我的观察结果是这个查询随机选择XYZ或ABC。。。然后将结果分享到问题中。您好,尝试了您的查询。速度很快,但达不到我的目的。看,如果多个where选择器匹配,我希望第一个where选择器出现在结果中。Code='XYZ'或Code='ABC'…现在XYZ和ABC都存在,但我只希望第一个选择器XYZ出现在结果中。但我的观察是通过这个查询随机选择XYZ或ABC。