2011-06-14 68 views
0

在MySQL中使用InnoDB,我想通過更好地利用聚集索引來加速選擇,因此在主鍵中包含更頻繁使用的列。InnoDBs聚集索引中的空值?

但是,一些頻繁使用的列允許爲空(有時是)。有沒有辦法將這些包含在聚集索引中(並允許它們爲空)?

如果沒有,是否有一些解決方法或有其他方法來做類似的事情?

+0

你真的認爲擴大主要指數是明智嗎?我不知道你的Db結構,或者你如何運行你的查詢,但是從一開始就篡改主索引聽起來是個壞主意。您始終可以在主字段開始的多個字段中添加編譯(唯一)索引。關於你的NULL情況,是否可以將NULL值更改爲空字符串值('')? – 2011-06-14 21:12:51

+0

我正在做一個簡單的表上大約7個連接的選擇。在試驗時,我向PK添加了一個經常使用的列(該列僅用於獲取它的數據,不加入或調用),那麼查詢時間從〜0.24s減少到〜0.11s。我希望對其他表格(如果不是相似的話)進行一些改進(因爲它們具有相同的形式並且類似地使用)。唯一的問題是數據可能是NULL。如果這些是字符串值,我猜空字符串可以工作,但對於數字值,我不能使用0,因爲它是有效值之一。 – Qtax 2011-06-14 23:00:52

+1

那麼,對於任何類型的優化(添加適當的索引都是優化),規範化數據字段將會產生很大的差異。這不僅會使正在處理字段數據的腳本變得更簡單,而且索引本身也會變得更簡單(通常會降低基數)。至於你的PRIMARY,這應該是一個行ID(越簡單/越小越好)。這些數字應該會發生任何類型的連接。當您將一個非連接列添加到PRIMARY時,它會加快速度,因爲它會根據您的'WHERE'子句縮小要檢查的行。 – 2011-06-15 02:25:32

回答

0

規範化表格以排除可空字段將在這種情況下工作(作爲Battle_707的評論)。