2012-12-04 99 views
1

我有一個大桌子(大約150 M行),如果我嘗試運行一個簡單的select count(*),那麼mysql工作大約一個小時,然後拋出一個錯誤。在一張大桌子上選擇count(*)mysql

我假設這不是由於mysql的限制,而是我身邊的問題,但我不知道從哪裏開始尋找。有任何想法嗎?

表是InnoDB的 的MySQL 5.5在Linux上

+0

這是一個很大的表,但一個小時聽起來很過分的...你嘗試過在一個特定的列做一個計數?你使用什麼數據庫引擎? – RonaldBarzell

+0

我不是MySQL專家,它可能會讓我立即想到'SELECT COUNT([單列,最好是簡單/小東西])'而不是'COUNT(*)'。 –

+0

你得到了什麼錯誤?你能分享這個錯誤嗎? –

回答

2

你可以用這樣的

你看行列的表狀況檢查....

+0

這不正是我所期待的,但仍然非常出色! 謝謝! – strum

+0

@strum不,不是。在那裏顯示的數字不需要是正確的。這些只是近似值。桌子越大,它可能從真實價值中獲得更大的收益。 – fancyPants

+0

@tombom你是對的! – silly

1

您可以使用count(1) instead of count(*)

Try ::

Select count(1) from my_table 
+0

我認爲它不會有所作爲,因爲表格只有兩行(整數)。事實上它沒有:-( 但無論如何。 – strum

0

加快此類查詢的最簡單方法是使用covering index。這將允許您掃描所需的行,但每行只需要更少的I/O字節(因爲您只掃描每行數據的一部分,而不是整行)。此外,如果您的索引按照與查詢相同的方式排序,則可以避免排序成本,並且可以掃描的行數大大減少。

0

您可以使用Information Schema

SELECT TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = YOUR_DB_NAME和table_name的= YOUR_TABLE_NAME