簡體   English   中英

MYSQL按日期分組性能查詢

[英]MYSQL Group By Date Performance Query

我當前正在編寫一個查詢,該查詢將在MySQL數據庫的MYISAM表上多次運行。

該查詢需要很多行(最多可以是100,000+),並且每月獲得總計。 我當前使用的SQL是

SELECT DATE_FORMAT(ct_cdatetime, "%m-%Y") AS Month, SUM(ct_total), SUM(ct_charge)
FROM client_transaction
WHERE (...omitted for this example...)
GROUP BY DATE_FORMAT(ct_cdatetime, "%m-%Y") ORDER BY ct_cdatetime ASC

我知道強制MySQL將日期強制轉換為字符串的性能問題。 它會更快或更有效嗎?

  • 1)保持原樣
  • 2)選擇所有行,並在PHP中將它們分組在一個數組中。
  • 3)在數據庫中有一個month-year int字段,並在添加行時對其進行更新(例如,2014年7月為714)?

最快的問題的答案很簡單:嘗試並測量。

SQL方面的性能實際上不受日期轉換的影響。 它由group by確定,尤其是排序的排序。

我懷疑傳輸數據並在應用程序端完成工作會更快。 特別是,您必須將大量(ish)數據從數據庫傳輸到應用程序。 然后,您必須在應用程序中復制將在數據庫中完成的工作。

但是,應用程序端的內存中算法可能比數據庫端的更通用算法更快。 在應用程序端進行工作可能會更快。

以下查詢速度更快,因為它僅提取日期的組成部分而不是創建格式化的文本:

SELECT YEAR(dtfield), MONTH(dtfield), COUNT(*)
FROM mytable
GROUP BY YEAR(dtfield), MONTH(dtfield);

請記住,使用函數時,MySQL無法對GROUP BY條件使用任何索引優化。 如果您有一個大表並且需要這種計算,那么通常會為它們創建單獨的索引列(如hellcode所示 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM