2013-07-07 40 views
1

我有從數據庫(mysql)表1034961行數據。如何提高mysql中的select性能?

結構..

表:tb_blog_image

| id(pk) | link(TEXT) | img_link(TEXT) | 
    |  1  |blogpost.com/aaa|http://sky.png  | 
    |  2  |blogpost.com/aaa|http://girl.png  | 
    |  3  |blogpost.com/aaa|http://cad.png  | 

現在,我要選擇從tb_blog_images具體img_link名單。

SQL ..

select link, img_link 
    from tb_blog_image 
    where link = 'blogpost.com/aaa'; 

結果38rows 6.37sec

如何提高選擇性能? 使鏈接列索引? 表正常化?

我想在1秒內運行。

我想聽各種提示。

+1

您需要在「鏈接」列中添加索引 –

+1

絕對需要索引。標準化鏈接列也可能值得研究。 – Jon

+0

您可以在表中添加一個fultext索引:http://www.petefreitag.com/item/477.cfm – Gimmy

回答

4

理想情況下,您可以在程序中使用主鍵(id)。

但是,如果失敗,鏈接列上的索引將解決您的問題。現在,您正在運行的查詢要求從磁盤加載表中的所有一百萬行,然後與您的查詢字符串值進行比較。使用索引,這可以減少到不超過三個或四個磁盤讀取。

另外,文本數據類型與表格的其餘部分分開存儲,效率不高。我會重新定義兩個文本列,類似varchar(300),這對於可能遇到的任何URL來說足夠長,但也提供了更高效的存儲:TEXT類型實際上適用於(可能)長的字段像備忘錄,或網頁的內容。

+0

謝謝。我修改鏈接,文本到varchar(300)。和索引。 – ash84

+0

什麼是您的新查詢時間? – Curt

+0

選擇查詢在1秒內​​運行。 – ash84

0

我不知道,你正在使用其他的比MySQL的語言,但不是同時選擇linkimg_link列,您可以選擇id

該代碼將是這樣的:

select id 
    from tb_blog_image 
    where link = 'blogpost.com/aaa'; 

// Now Fetch The Rows 

Echo the rows using a loop one by one { 

// Inside this loop, do this 

    select link, img_link 
    from tb_blog_image 
    where link = $id 

// $id is a variable of the current row 

echo "whatever you want"; 

} 

讓我知道,你所使用的語言,我可以幫助,如果是PHP。

讓我知道,如果它提高了性能。