2010-05-16 253 views
2

我在我的網站上有非常複雜的搜索算法,所以我決定用 緩存表或所有可能的結果。 我想問一下哪種結構會更好,或者不是其中之一? (MySQL的)什麼mysql表結構更好

  1. word VARCHAR,results TEXT或BLOB我將在其中存儲中找到的對象的標識(例如6個字節用於每個ID)

  2. word VARCHAR,result INT,但話不獨特現在

我想我要在1 1000-10000 IDS每一行 或200 000 000多個行2)

約200 000行)

第一種方式需要更多的存儲內存,但我認爲這將是更快找到1個唯一行之間的200萬輛,比1000行之間的200個億非唯一行

我想對word列,沒有獅身人面像指數。

那你覺得呢?

p.s.像往常一樣,如果不是很好,我的英語很抱歉。

+0

沒有足夠的信息給我,但MySQL確實有原生全文檢索(FTS):http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html – 2010-05-16 20:24:43

回答

0

MyISAM似乎是我看到大多數人使用的默認表,並且我從未親自有過MyISAM工作不正常的情況。 This sitethis site都列出了MySQL中可用的每種表類型的好處,如果你想要不同的東西。

0

選項1可能會表現更好。

在選項1中,您將能夠幾乎完全讀取所有數據(如果不是全部的話)順序讀取。

在選項2中,行可能不會按順序存儲。但是,如果您將它們全部寫入,那麼它們實際上可能在磁盤上具有良好的數據位置。所以,如果沒有測試你的確切用例,很難確定。

如果您正在對緩存表進行增量更新,最佳策略會受到影響。在選項1中,更新將花費更長時間,因爲可能需要將blob寫入新頁面。在選項2中,您只需添加新行,但您也可能需要刪除行。如果您使用增量更新添加新行,您最終可能會得到更多的隨機讀取,這會使緩存表讀取速度變慢。

如果單詞列是主鍵並且您使用的是最新版本的MySQL,那麼使用InnoDB讀取性能甚至可能比MyISAM更好。藉助InnoDB,所有數據都與主索引集成,因此您可以通過順序讀取來檢索所有數據。雖然可能意味着一個或多個隨機讀取,但您有一個blob的事實。當然,經常讀取的數據足以保留在InnoDB緩衝池中,不會產生磁盤讀取。

使用MyISAM,MySQL需要讀取索引表(儘管它可能緩存在keybuffer中)以獲取指向數據表(可能會緩存在OS磁盤緩衝區中)的指針。