2010-03-02 71 views
4

我正在創建一個網站,允許用戶向公衆分享特定頁面。它類似於jsbin.com讓你爲你正在創建的腳本創建一個公共URL。我與現在的工作基本MySQL表爲:我應該如何索引這個MySQL數據庫?

CREATE TABLE IF NOT EXISTS `lists` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `hash` varchar(6) NOT NULL, 
    `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `hash` (`hash`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

key領域是保存隨機字符串,用戶將鍵入的URL的最後一列。因此,例如,如果用戶在那裏公佈了散列值爲a1b2c3的頁面,則URL將爲http://mysite.com/a1b2c3

好的,抱歉,描述花了這麼長時間。我的問題是,我應該索引哈希列嗎?這會使查詢更快,因爲我主要是通過散列值查看行嗎?

此外,我有另一個表與這個有一個外鍵關係。將它與哈希列關聯起來是否在性能上有意義?

感謝您的幫助。

回答

1

您不僅應該在哈希列上編制索引,還應該將其作爲主鍵並擺脫冗餘id列。

是否還有其他一些表格和/或列沒有列出?該表格在created_at列以外沒有多少意義。

+0

我忘了提及另一個表有一個外鍵多對一的關係到這張表。我遇到的另一個問題是,如果哈希列是主鍵,是否可以使用外鍵引用此哈希列? – 2010-03-02 22:25:05

+0

可能有關於使用'varchar'字段作爲關鍵字的性能考慮事項,但不應該被禁止。什麼是散列來源,期望多長時間,以及您在表格中預計有多少行? – 2010-03-02 23:24:42

+0

在另一個表中的外鍵引用一個表中的主鍵(即您唯一的哈希列)時確實有意義。 – Summer 2010-03-03 03:31:46

0

是的,如果你正在查找散列,那麼你肯定會希望在該字段上有一個索引。通過你的桌面設計的外觀,你可能希望它也是一個獨特的索引。

0

是的,你絕對應該索引hash列,這是非常重要的,禁用密鑰壓縮。

密鑰壓縮是MyISAM索引中的一項功能,通過在索引鍵中只存儲公共前綴的長度來縮小文本索引的大小。

這可能有助於提高人類語言短語的表現,但不會幫助散列。

本文從我的博客的開啓和關閉與鍵壓縮哈希般的字符串比較索引查找的性能:

要禁用鍵壓縮,加PACK_KEYS = 0CREATE TABLE聲明。

更新:

這種說法在CREATE TABLE

UNIQUE KEY `hash` (`hash`) 

有效上hash創建UNIQUE指數,所以你已經擁有它。只要確保密鑰壓縮關閉。

0

是的。爲該列添加UNIQUE INDEX非常重要。首先你必須確定它是獨一無二的(好吧......它是一種ID),你會做很多像下面這樣的查詢:

SELECT .... FROM .... WHERE hash = 'abc323';