2013-12-09 37 views
0

我在我的主頁中有來自同一個表的10個請求,每個請求都有不同的條件,所以這就是爲什麼我提出了10個請求。該表有12列。我的問題是..它使不同的MySql查詢請求時間和服務器負載

頁面加載時間和服務器負載如果我只需要從該表要求6列,我作爲請求(SELECT * FROM ...)而不是像(SELECT columns,columns,columns,columns,columns,columnsFROM ....)那樣提出請求

任何信息或建議將會有所幫助。 謝謝

+1

你的問題不清楚。您可以在SELECT和FROM之間指定列而不是行。行是查詢返回的內容。但是,一般來說,select *總是邪惡的,因爲數據庫的更改會改變程序的行爲。改爲指定您感興趣的*列*。另外,如果您只對某些列感興趣,那麼指定它們對於數據庫來說就不那麼容易了。 –

+0

這聽起來很公平,但頁面加載時間呢?它會有所作爲嗎? – user2044626

回答

1

只選擇您真正需要的列總是比select *更快,除非在選擇所有列時。即使如此,指定列也是可取的,因爲對數據庫的更改不會改變代碼的功能。

您的列越大,您將看到的差異越大。想象一下,一個表是這樣的:

create table person (
    id integer, 
    name varchar(20), 
    photo blob 
); 

現在你選擇select * from person where id>=10 and id<=20。這意味着MySQL服務器必須從數據庫中讀取所有匹配的記錄,包括可能很大的照片blob,並將其全部傳遞給應用程序,以便讓應用程序丟棄使所選數據的99%的照片。如果你仍然扔掉照片,select id, name from person ...會更快,並減少對機器的負載,這是一個負載很重的網站上有很多遊客在同一時間很重要。

當然,如果你的表格有6個整數列,並且你的決定是select *,或者選擇了4個特定的列表,那麼效果不太明顯。

如果您有類似上面的表格,並且您已選擇僅包含id和name但沒有照片,則在這兩列上放置composite index是有意義的。這樣,選擇時,數據庫服務器只需讀取密鑰,甚至不必從磁盤加載照片。

相關問題