Mysql

我可以在 GROUP BY 子句中使用唯一索引而不是 mysql 中的列嗎

  • September 28, 2016

我有一個帶有以下列的表shift_wise_traffic 。

toll        date            shift      car      truck      bus
1          2016-09-01        1        10        20        30
1          2016-09-01        2        15        25        35
1          2016-09-01        3        20        30        40

2          2016-09-01        1        5         10        15
2          2016-09-01        2        20        25        30
2          2016-09-01        3        35        40        50

1          2016-09-02        1        10        20        30
1          2016-09-02        2        10        20        30
1          2016-09-02        3        10        20        30

2          2016-09-02        1        10        20        30
2          2016-09-02        2        10        20        30
2          2016-09-02        3        10        20        30

現在我想按tolldate生成****shift_wise_traffic表組 的輸出。我創建了一個名為shift_unique_index的唯一索引,它有兩列tolldate

所以不要寫下面的查詢,

SELECT toll, date, SUM(car), SUM(truck), SUM(bus) FROM shift_wise_traffic 
GROUP BY toll, date;

我可以使用shift_unique_index使用此查詢嗎?

SELECT toll, date, SUM(car), SUM(truck), SUM(bus) FROM shift_wise_traffic 
GROUP BY shift_unique_index;
SELECT toll, date, SUM(car), SUM(truck), SUM(bus)
   FROM shift_wise_traffic 
   GROUP BY toll, date;
  • GROUP BY必須有一個列列表*,*而不是索引名稱。
  • AnINDEX是一種優化,而不是要求。
  • An對於這樣的查詢INDEX 可能很有用。(沒有索引可能對這個特定的查詢有用。)
  • 可能此查詢將簡單地掃描整個表,按收費+日期排序,匯總值,然後提供輸出。(或者它可以基於toll+date建構一個記憶體中的雜湊值進行求和。)
  • UNIQUEINDEX- 在這種情況下沒有區別。 UNIQUE= INDEX+ 一個約束。對於INSERT,UNIQUE防止重複。

感覺就像你PRIMARY KEY(date, shift, toll)順序一樣。是嗎?如果是這樣,那麼將順序更改為PRIMARY KEY(toll, date, shift) 可能會使您的GROUP BY執行速度更快一些。(但它可能會減慢其他操作。)

引用自:https://dba.stackexchange.com/questions/150622