嗨,我有一个名为train_stop的表,它有大约100万行。Indexing Mysql Group BY Query
我有以下的query
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
。执行时间为几秒。请告诉我们是否有更好的方法来编写上面的查询和索引策略,以便在毫秒内优化并获得结果。你的帮助将会非常有用。
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`
,所以你可以张贴想要的出发顺序你的'CREATE TABLE'语句查询?什么是你的服务器MySQL或MS SQL?你必须选择一个并标记它 – Alex
只是调查你的查询了一下。你在这里做什么???为什么'UNION'表本身多次?以及为什么只发布部分查询?如果你需要帮助,你应该发布完整的查询。 – Alex
谁创建了这个表结构?为什么'''数字''varchar(1000)NOT NULL,'?你知道这是什么意思吗? 'varchar(1000)'是一个巨大的关键!谁需要? – Alex