如果決定使用索引禁用和激活,應(yīng)該使用第13章中介紹的表修復(fù)鎖定協(xié)議以阻止服務(wù)器同時更改鎖(雖然此時不對表進(jìn)行修復(fù),但要對它像表修復(fù)過程一樣進(jìn)行修改,因此需要使用相同的鎖定協(xié)議)。
上述數(shù)據(jù)裝載原理也適用于與需要執(zhí)行不同操作的客戶機(jī)有關(guān)的固定查詢。例如,一般希望避免在頻繁更新的表上長時間運(yùn)行SELECT 查詢。長時間運(yùn)行SELECT 查詢會產(chǎn)生大量爭用,并降低寫入程序的性能。一種可能的解決方法為,如果執(zhí)行寫入的主要是INSERT 操作,那么先將記錄存入一個臨時表,然后定期地將這些記錄加入主表中。如果需要立即訪問新記錄,這不是一個可行的方法。但只要能在一個較短的時間內(nèi)不訪問它們,就可以使用這個方法。使用臨時表有兩個方面的好處。首先,它減少了與主表上SELECT 查詢語句的爭用,因此,執(zhí)行更快。其次,從臨時表將記錄裝入主表的總時間較分別裝載記錄的總時間少;相應(yīng)的索引高速緩存只需在每個批量裝載結(jié)束時進(jìn)行刷新,而不是在每行裝載后刷新。這個策略的一個應(yīng)用是進(jìn)入Web 服務(wù)器的Web 頁訪問MySQL數(shù)據(jù)庫。在此情形下,可能沒有保證記錄立即進(jìn)入主表的較高權(quán)限。
如果數(shù)據(jù)并不完全是那種在系統(tǒng)非正常關(guān)閉事件中插入的單個記錄,那么減少索引刷新的另一策略是使用MyISAM 表的DELAYED_KEY_WRITE 表創(chuàng)建選項(如果將MySQL用于某些數(shù)據(jù)錄入工作時可能會出現(xiàn)這種情況)。此選項使索引高速緩存只偶爾刷新,而不是在每次插入后都要刷新。
如果希望在服務(wù)器范圍內(nèi)利用延遲索引刷新,只要利用--delayed-key-write 選項啟動mysqld 即可。在此情形下,索引塊寫操作延遲到必須刷新塊以便為其他索引值騰出空間為止,或延遲到執(zhí)行了一個flush-tables 命令后,或延遲到該索引表關(guān)閉。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com