我正在處理帶有「狀態」列的表,該列通常只包含2個或3個不同的值。有時,當這臺擁有幾百萬行,下面的SQL語句變慢(我假設全表掃描完成):SQLite:使用COUNT和GROUP BY加速SQL語句
SELECT state, count(*) FROM mytable GROUP BY state
我希望能得到這樣的:
disabled | 500000
enabled | 2000000
(基本上我想知道有多少項目「啓用」,有多少項目是「禁用」的 - 實際上這是一個數字,而不是實際應用中的文本)
我想爲我的狀態列添加一個索引是相當無用的,因爲在那裏只能找到極少數不同的值。我還有什麼其他選擇?
還有一個「時間戳」列(帶索引)。眼下
WHERE timestamp BETWEEN x AND y
我使用一個sqlite3的數據庫,但它看起來像其他數據庫引擎都沒有太大的不同,所以對於其他數據庫引擎的解決方案可能是有趣的:理想的解決方案還應該工作得很好,如果我添加好。
謝謝!
你的執行計劃是什麼樣的? –
SQLite只給了我一行,在「詳細信息」列中說「TABLE mytable」(我猜是全表掃描)。 – Jens
但是,MS SQL告訴我相同的語句(上面沒有where條件和200萬行):SELECT 0%,Compute Scalar 0%,Hash Match(Aggregate)65%,Clustered Index Scan 35% – Jens