嗨,我有一個名爲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