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