爲了說明問題,我們假設我試圖在MySQL表中表示一個非常簡單的文件系統。請注意,這不是我正在做的事情,它只是爲了解決這個問題的簡單基礎。所以不要打擾告訴我更好的存儲文件的方式。該表的架構如下:高性能mysql行內文本字段
varchar path
varchar filename
blob content
上面的架構麻煩的是,它也有壞的表現,每當查詢並不一定需要的內容領域,由於內容領域可能是安靜的大。例如,如果我想執行一個列出給定路徑中的所有文件的查詢,MySQL引擎(爲了讀取文件名字段)將把每行讀入匹配where子句的內存。這意味着這個查詢不需要的內容仍然需要加載到內存中,這會損害性能。
典型的解決這個問題是將內容移動到其總是由ID直接訪問的單獨的表。這種方法的麻煩在於它增加了插入和選擇的複雜性。直接將內容直接附加到單個行中不再是顯而易見的。
所以,我的問題(終於!)是這樣的。有沒有辦法將BLOB留在模式中,但導致MySQL只有在特別要求時才抓住它?我想知道是否有可以放置在列上的備用存儲引擎或修飾符。謝謝!