data-id="1190000005008401" data-license="cc">
1、將經常要用到的欄位(比如經常要用這些欄位來排序,或者用來做搜尋),則最好將這些欄位設為索引。
2、欄位的種類儘可能用int 或者tinyint類型。另外欄位儘可能用NOT NULL。
3、當然無可避免某些欄位會用到text ,varchar等字元類型,最好將text欄位的單獨出另外一個表出來(用主鍵關聯好)
4、欄位的類型,以及長度,是一個很考究開發人員最佳化功力的一個方面。如果表資料有一定的量了,不妨用PROCEDURE ANALYSE()命令來取得欄位的最佳化建議!(在phpmyadmin裡可以在查看錶時,點擊 “Propose table structure” 來查看這些建議) 如此可以讓你的表欄位結構 趨向完善。
5、select 盡量少用,你想要什麼欄位 就select 什麼欄位出來 不要老是用 號!同理,只要一行資料時盡量使用 LIMIT 1
6、絕對不要輕易用order by rand() ,很可能會導致mysql的災難!!
7、每個表都應該設定一個ID主鍵,最好的是一個INT型,並且設定上自動增加的AUTO_INCREMENT標誌,這點其實應該作為設計表結構的第一件必然要做的事!!
8、拆分大的 DELETE 或 INSERT 語句。因為這兩個操作是會鎖表的,表一鎖住了,別的操作都進不來了,就我來說 有時候我寧願用for迴圈來一個個執行這些操作。
9、不要用永久連結 mysql_pconnect();除非你真的非常肯定你的程式不會發生意外,不然很可能也會導致你的mysql死掉。
10、永遠別要用複雜的mysql語句來顯示你的聰明。就我來說,看到一次關聯了三,四個表的語句,只會讓人覺得很不靠譜。
11、應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
12、應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描
13、應盡量避免在 where 子句中使用 or 來串連條件,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num=10 or num=20可以這樣查詢:select id from t where num=10union allselect id from t where num=20
14、模糊查詢的%XX%會導致全表掃描
15、in 和 not in 也要慎用,否則會導致全表掃描,盡量使用between and
16、應盡量避免在 where 子句中對欄位進行運算式操作,這將導致引擎放棄使用索引而進行全表掃描。如:
select id from t where num/2=100應改為:select id from t where num=100*2
17、應盡量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全表掃描
18、索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要謹慎考慮,視具體情況而定。一個表的索引數最好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有必要
19、任何地方都不要使用 select from t ,用具體的欄位列表代替“”,不要返回用不到的任何欄位
20、儘可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長欄位儲存空間小,可以節省儲存空間,其次對於查詢來說,在一個相對較小的欄位內搜尋效率顯然要高些。
21、盡量使用數字型欄位,若只含數值資訊的欄位盡量不要設計為字元型,這會降低查詢和串連的效能,並會增加儲存開銷。這是因為引擎在處理查詢和串連時會逐個比較字串中每一個字元,而對於數字型而言只需要比較一次就夠了。
以上就介紹了mysql語句最佳化建議,包括了Mysql,sql語句方面的內容,希望對PHP教程有興趣的朋友有所協助。