我有一個大桌子(大約150 M行),如果我嘗試運行一個簡單的select count(*),那麼mysql工作大約一個小時,然後拋出一個錯誤。在一張大桌子上選擇count(*)mysql
我假設這不是由於mysql的限制,而是我身邊的問題,但我不知道從哪裏開始尋找。有任何想法嗎?
表是InnoDB的 的MySQL 5.5在Linux上
我有一個大桌子(大約150 M行),如果我嘗試運行一個簡單的select count(*),那麼mysql工作大約一個小時,然後拋出一個錯誤。在一張大桌子上選擇count(*)mysql
我假設這不是由於mysql的限制,而是我身邊的問題,但我不知道從哪裏開始尋找。有任何想法嗎?
表是InnoDB的 的MySQL 5.5在Linux上
你可以用這樣的
你看行列的表狀況檢查....
這不正是我所期待的,但仍然非常出色! 謝謝! – strum
@strum不,不是。在那裏顯示的數字不需要是正確的。這些只是近似值。桌子越大,它可能從真實價值中獲得更大的收益。 – fancyPants
@tombom你是對的! – silly
您可以使用count(1) instead of count(*)
Try ::
Select count(1) from my_table
我認爲它不會有所作爲,因爲表格只有兩行(整數)。事實上它沒有:-( 但無論如何。 – strum
加快此類查詢的最簡單方法是使用covering index。這將允許您掃描所需的行,但每行只需要更少的I/O字節(因爲您只掃描每行數據的一部分,而不是整行)。此外,如果您的索引按照與查詢相同的方式排序,則可以避免排序成本,並且可以掃描的行數大大減少。
您可以使用Information Schema。
SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = YOUR_DB_NAME和table_name的= YOUR_TABLE_NAME
這是一個很大的表,但一個小時聽起來很過分的...你嘗試過在一個特定的列做一個計數?你使用什麼數據庫引擎? – RonaldBarzell
我不是MySQL專家,它可能會讓我立即想到'SELECT COUNT([單列,最好是簡單/小東西])'而不是'COUNT(*)'。 –
你得到了什麼錯誤?你能分享這個錯誤嗎? –