寫一個查詢的時候我總是想知道的一件事是,我正在寫最優化的查詢嗎?我知道一些事情,如:使用選擇場做和不做寫作mysql查詢
1),filed2代替SELECT *
2)給予適當的索引表
,但我相信還有更多的事情,應保持在因爲大多數數據庫只能增長更多,而最佳查詢將有助於執行時間。你能分享一些編寫查詢的技巧和竅門嗎?
寫一個查詢的時候我總是想知道的一件事是,我正在寫最優化的查詢嗎?我知道一些事情,如:使用選擇場做和不做寫作mysql查詢
1),filed2代替SELECT *
2)給予適當的索引表
,但我相信還有更多的事情,應保持在因爲大多數數據庫只能增長更多,而最佳查詢將有助於執行時間。你能分享一些編寫查詢的技巧和竅門嗎?
還有做的和不要的,你可能會發現Hidden Features of MySQL有用。
測試是衡量性能的最佳方法。在實時數據庫上監控您的查詢,並利用諸如slow query log之類的內容。
我也建議啓用query cache,這將給大多數典型的使用情況一個巨大的提升。
呀Rikh似乎GR8,但我只是想知道如果有一個最佳的查詢和它甚至在罕見的我們的腦海中。 – nik 2010-04-23 08:09:50
事實上,沒有「提示」可以幫助你。
數據庫設計需要深入的知識,而不是技巧。
這些「不」的總是有「重量」。大多數此類列表都列舉了最不重要的事情,並沒有提及重要事項。您的列表例如,是如果它是美食論壇:
第一個令人印象深刻,但從未在現實世界幫助。
第二個是正確的,但必須有深厚的知識支持才能做到正確。
所以,它必須是一本書,而不是技巧。來自保羅杜比奧斯的推薦。
「我所要求的只是讓有能力的人對問題做出誠實的迴應,如果不能,請解釋原因。」 - Bill O'Reilly – erisco 2010-04-23 08:27:35
使用下面的字段不一定每個表
tablename_id(auto increment , unsigned zerofill)
created_by(timestamp)
tablerow_status(enum ('t','f') by default set 't')
相關子查詢是非常糟糕的,但往往不能很好地理解,並在生產中結束。他們通常可以通過使用派生表的固定和連接來代替。 http://en.wikipedia.org/wiki/Correlated_subquery
還有一兩件事,我發現今天是關於COUNT(*)和COUNT(col)之間的差異
使用COUNT(*)比COUNT快(COL)這個表中緩存的行數
MyISAM表,對於InnoDB不緩存行計數,可能是沒有WHERE子句
它是慢對於MYISAM和innoDB,最好使用NOT NULL列,而不是允許使用Null的其他列。
更多細節here
這個問題應該作出社區維基 – Axarydax 2010-04-23 08:01:28