2011-04-20 41 views
0

我們擁有一個數據倉庫,非規範化表格的範圍從500K到600萬行不等。我正在開發一個報告解決方案,因此我們正在利用數據庫分頁來提高性能。我們的報告具有搜索條件,並且已經創建了必要的索引,但是,在處理百萬行表時,性能很差。客戶端始終知道總記錄數,因此我必須獲取數據以及記錄數。MySQL性能

有沒有其他的事情可以幫助我的表現?我不是MySQL的dba,他沒有真正提供任何東西,所以我不確定他能做什麼配置明智。

謝謝!

+1

你有沒有考慮數據分片? http://en.wikipedia.org/wiki/Shard_(database_architecture) – 2011-04-20 16:56:52

+0

下面的例子有一個包含500多萬行和0.02秒運行時間的表。 http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 – 2011-04-20 18:14:20

回答

0

如果您對大表進行分區並將這些零件存儲在不同的服務器上,那麼查詢運行速度將會加快。

看到:http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

還要注意的是使用NDB表,你可以使用,它們會在O(1)時間擡頭哈希鍵。

對於你可以在一個單獨的表中保留一個運行總數並更新的行數。例如在after insertafter delete觸發器中。
儘管觸發器會減慢刪除/插入操作,但隨着時間的推移這將會傳播。請注意,您不必將所有總計保留在一行中,您可以存儲每個條件的總計。喜歡的東西:

table field condition row_count 
---------------------------------------- 
table1 field1 cond_x  10 
table1 field1 cond_y  20 

select sum(row_count) as count_cond_xy 
from totals where field = field1 and `table` = table1 
and condition like 'cond_%'; 
//just a silly example you can come up with more efficient code, but I hope 
//you get the gist of it. 

如果你發現自己總是沿着相同的條件下計算,這樣可以加快你的重新設計select count(x) from bigtable where ...了幾分鐘瞬間。

+0

非常感謝你! – Marco 2011-04-20 17:15:59