2012-09-05 74 views
0

我設計將被用於交叉參考的目的與結構表:MySQL的交叉引用查找

id (BigInt) | cuid (Varchar(255)) | term (Varchar(255)) 

網頁上的人將鍵入無論是CUID或任期,程序將查找相​​應的ID以在程序內部使用。數據庫中共有2,669,793個條目(因此id將從0到2669792)。

我想這可能會很慢。我應該使用哪些技術來確保儘可能快的查找?查詢將類似於SELECT id WHERE cuid = ?SELECT id WHERE term = ?。因爲我沒有在WHERE子句中查找id本身,所以我沒有看到我如何從索引中受益(儘管id本質上會被編入索引)。我聽說過諸如將單個表分成多個表和進行某種合併操作。有什麼想法嗎?謝謝。

回答

2

你可以把索引放在任何字段上,而不僅僅是id。

如果你的數據相對靜態,這可能是有益的。如果您要通過多個字段進行查詢,則多個字段上的索引也可能具有優勢。

如果您的數據經常變化的,那麼其他索引將有一個處理成本,所以它取決於你的數據使用量的平衡

+0

啊,所以我可以把一個索引放在一個字符串上,並且能夠做一個不斷的查找? – Aaron

+1

是的,有效 – podiluska

1

您將需要提供有關cuidterm領域的兩個指數,假設ID是主鍵。

您還需要確保分配了足夠的內存以將這些索引保留在內存中以獲得最佳性能。

+0

我明白了。是的,將這些索引保存在內存中似乎會佔用很多。如果我想在文本字段中包含諸如將cuid或術語作爲人類類型的特徵,那麼索引是否無用,因爲某些算法會在所有行上進行某種模式匹配? – Aaron

+1

@Aaron如果您要在查詢中運行'WHERE cuid LIKE('%somevalue%')'過濾器,您仍然需要這些字段的索引。 –

+0

太好了,謝謝!我沒有意識到有任何內置的模式匹配。 – Aaron