我正在考慮加入一個由許多(〜8)規範化的表非規範化的飼餵表上添加我的數據庫中一些非規範化的信息,專門用於提高核心使用select查詢時間在我的網站上的情況。MySQL的非規範化與觸發器,具體諮詢
與查詢當前方法的問題是:
慢速查詢時間,有8和12之間的連接(一些左的連接)來訪問此信息,使用情況下,該對於某些查詢可能需要〜3000ms。
表鎖定/阻塞,當信息在一天或一週的繁忙時間進行更新,(因爲我使用MyISAM表)查詢被鎖定/阻塞,這可能會導致進一步的問題(連接耗盡,性能越差)
我使用Hibernate(3.5.2),MySQL 5.0中(所有的MyISAM表)和Java 1.6
我想一些具體的建議(最好是基於具體經驗)約到底什麼纔是更新非規格化表的最好方法。
下面,我想起
- 創建與INNODB型非規範化表,讓我得到行級鎖,而不是表鎖
- 在正確規範化表創建觸發器更新反規格表
我在尋找:
- 問題 - 我可能沒有想到的事情會影響我期望的結果。
- 特定的MySql設置可以提高性能,減少非規格化表上的鎖定/阻塞。
- 爲此場景編寫觸發器的最佳方法。
- ?
讓我知道是否有任何其他信息需要幫助回答這個問題。
乾杯。
非規範化的數據是否嚴格數字?非規範化操作是否嚴格代數? – 2011-12-27 15:48:22
你在說多少數據? 10行? 10M行?你可能會更好地服務於更多/更好/覆蓋索引。查詢是靜態的嗎?您也可以預先緩存它。 '解釋器'對你的查詢說了什麼? – ethrbunny 2011-12-27 15:55:38
操作都是代數(我認爲),沒有像字符串比較或全文字符串搜索 – 2011-12-27 16:10:01