使用 MySQL DATETIME 索引最佳化日期查詢
在 MySQL 中使用 DATETIME 欄位時,最佳化涉及日期篩選的查詢至關重要。若要提高查詢 DATETIME 列的一部分的查詢效能,請考慮使用專用索引。
假設您有一個名為 transactionlist 的表,其中包含大量記錄和一個名為 TranDateTime 的 DATETIME 欄位。執行查詢時遇到效能問題,例如:
SELECT * FROM transactionlist WHERE date(TranDateTime) = '2008-08-17'
查詢緩慢的原因:
MySQL 使用全表掃描來執行此查詢,因為列已傳遞透過date() 函數。查詢最佳化器無法預測函數的結果,因此會繞過任何索引。
解決方案:建立日期索引
避免表掃描並提高查詢效能,建立一個覆蓋 TranDateTime 列的日期部分的索引。您可以使用以下命令執行此操作:
CREATE INDEX idx_TranDateTime_date ON transactionlist (date(TranDateTime));
使用日期索引的範例查詢:
建立索引後,您的查詢將利用它並顯著運行更快:
SELECT * FROM transactionlist WHERE date(TranDateTime) BETWEEN '2008-08-17' AND '2008-08-17 23:59:59.999999';
注意:
使用BETWEEN 運算子時,請確保使用時間部分指定一天的結束時間,以擷取該時間內的所有交易所需的日期範圍。
以上是如何使用 DATETIME 索引優化 MySQL 中的日期查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!