我有超過 1000 萬行。計算行數太慢了。我想估計行數。
當前查詢是這樣的:
SELECT count(*) FROM `database` WHERE `location` LIKE '%New York%'
這給了我確切的數字而且它太慢了。我想要的是這樣的:
ESTIMATE count(*) FROM `database` WHERE `location` LIKE '%New York%'
也許這可以通過將查詢限制為表的子集(每第 n 行或某事)來完成。也許有一個可以使用的內置函式。
編輯:也許我可以將查詢限制為每第 n 行?然后乘以 n。
Edit2:我只是嘗試每隔 10 行計數一次,然后將計數乘以 10,但速度沒有增加,盡管自動遞增的“計數器”是主鍵。
SELECT count(*) FROM database WHERE `location` LIKE '%Los Angeles%' and counter%10 = 0
uj5u.com熱心網友回復:
在這種情況下,COUNT(*) 的性能并不是最大的性能問題。性能無法提高,因為您的搜索條件LIKE '%...%'必然會運行表掃描。無論如何,它必須檢查表中的每一行,以檢查它是否符合您的條件。
使其更快的替代方案:
使用全文索引而不是
LIKE使用通配符的謂詞匹配模式存盤計數并在添加或更改資料時保持更新,正如上面的評論所建議的(但您需要為每種可能的搜索模式設定一個單獨的計數器)
獲得更強大的計算機
存盤更少的資料
uj5u.com熱心網友回復:
如果你有,這會運行得更快INDEX(city):
WHERE `city` = New York'
這將運行幾乎一樣快:
WHERE `city` = New York%'
如果您當前有location地址、城市、州、郵編的組合,那么您可能需要重新考慮是否選擇location在單個列中。或者FULLTEXT按照 Karwin 的建議使用索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450590.html
上一篇:SQL:FULLTEXT速度索引
