2012-10-28 83 views
2

首先,我仍然很新的PHP/MySQL的所以原諒我的問題,如果實在是太簡單了,你:)MySQL的 - 如何優化錶速度

這裏是我的問題:我目前的工作將大量數據存儲到mysql數據庫中。這基本上是我兒子學校的檔案目錄。

的結構基本上是:

ID,關鍵字,標題,描述,URL,等級,哈希

id is int 11 
keyword is varchar 255 
title is varchar 255 
description is text 
url is varchar 255 
rank is int 2 
hash is varchar 50 

我們打算插入包含上述領域的約1000萬行,我的使命是爲能夠儘可能快地查詢數據庫。

我的查詢始終是一個確切的關​​鍵字。

例如:

select * from table where keyword = "keyword" limit 10 

我真的只是需要查詢的關鍵字,而不是標題或描述或其他任何東西。每個關鍵字最多可以有10個結果 - 從不會更多。

我沒有關於mysql索引和東西的真實線索,但我讀到它可以提高速度,如果你有一些索引。

現在,這裏是我需要從專業人士的幫助。我的任務是能夠運行最快的查詢,因此查詢數據庫不會太長。由於我只查找關鍵字字段,所以我確信有一種方法可以確保即使您有數百萬行,結果也可以快速返回。

你會建議我應該怎麼做。我應該將關鍵字字段設置爲INDEX還是必須觀看其他內容?由於我沒有關於INDEXES的真實線索,所以我們不勝感激,也就是說我不知道​​我是否應該使用索引,或者如果我必須將它們用於關鍵字,標題,描述等所有內容......

數據庫經常更新 - 以防事件發生。

您是否認爲甚至可以存儲數百萬行並在不到一秒鐘內完成查詢?

任何其他建議,如自定義my.cnf設置等也將有所幫助。

非常感謝您的幫助。

回答

1

你的直覺是正確的 - 如果你是在keywordWHERE條款進行篩選,它應該被索引,你可能會看到一些運行速度的提高,如果你做的。

CREATE INDEX `idx_keyword` ON `yourtable` (`keyword`) 

您可能使用如phpMyAdmin之類的客戶端,這使得創建索引比執行命令更容易,但回顧the MySQL documentation on CREATE INDEX。你是一個非常普通的案例,所以你不需要任何特殊的選擇。

雖然這是不適合你的情況下(如你說會有高達每keyword 10行),如果你已經對keyword定義的唯一約束或PRIMARY KEYFOREIGN KEY,它將作爲一個指標充當好。

1

keyword列中添加索引。它會顯着提高速度。那麼以毫秒爲單位查詢數據應該沒有問題。

在generel你應該換田野上你的索引使用在你where條款。這樣,數據庫可以非常快速地限制數據並返回結果。