2013-03-14 44 views
0

過去我已經完成了許多常規數據庫查詢,但現在我擁有大約150萬個條目的數據庫,並且需要能夠快速搜索實時更新。如何爲大型數據庫表創建索引

我的數據庫全部是美國郵政編碼和加拿大郵政編碼,包括各種緯度,緯度和城市......我需要能夠在一秒鐘內拉出一個單一的郵政編碼或郵政編碼並將其發回(使用ajax )到網頁。因此,當用戶輸入郵政編碼/郵政編碼時,國家,城市和州/省將自動填寫。

目前我使用下面的查詢:

$sql = "SELECT city, province, country 
    FROM postalcode 
    WHERE PostalCode='$zip'"; 

我從來沒有現在使用的索引。我如何創建一個並替換我的查詢以獲得相同的結果?

(加分!?將指數使用mysqldump進行備份)

謝謝!

回答

0

最後,我已經建立了我指數郵政編碼直接從MySQL命令行:

CREATE INDEX postal_index ON postalcode(postalcode); 

我的代碼搜索從4.89sec去0.00 !!!!!!!

2

您不要替換爲查詢。該索引將被優化器用於獲取您的查詢。索引駐留在服務器上,不屬於mysqldump。它將在您的表的DDL中。

請參閱How do I add indices to MySQL tables?。這是假設你知道欄把你的指數(提示:PostalCode

+0

+1的獎金問題!謝謝!我會查看你獲得的另一篇文章! – 2013-03-14 01:11:42

0

索引添加到PostalCode場,看看性能提高。

我通常使用phpMyAdmin來創建我的索引,但是您可以使用另一個發佈建議的命令行。

0

我認爲將你的ajax請求分成兩份是個好主意。

第一個ajax請求只從表格中提取可用的郵政編碼(一個新郵政編碼,僅限於郵政編碼)。

當完整輸入郵政編碼(或用戶不添加新號碼)並返回城市和國家時,第二個ajax請求將觸發。

單個列的縮小大小,僅數字表可以提高您的第一個ajax請求。

儘管如此,你必須在你的「大」表上添加一個索引。使用phpmyadmin來執行此操作。 作爲一條經驗法則:只索引你的where子句中的列/列(在你的情況下只有PostalCode)

0

檢出Adminer。安裝非常簡單,可以用來快速修改表格的索引。

你會想在PostalCode上創建一個索引,如果可能的話,你會希望PostalCode成爲你的主鍵。

如果您在查詢時間過長時仍遇到問題,請嘗試增加您的Innodb_buffer_pool,使其足以容納完整的郵政編碼表。