日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql性能优化的一些建议

發布時間:2024/10/12 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql性能优化的一些建议 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql性能優化的一些建議

1、EXPLAIN 你的 SELECT 查詢
查看rows列可以讓我們找到潛在的性能問題。

2、為關鍵字段添加索引,比如:where, order by, group by等后面的字段
注意:like '%abc%'; 是不會用到索引的
只有 like 'abc%' 才會用到索引

3、當只要一行數據時使用 LIMIT 1
MySQL數據庫引擎會在找到一條數據后停止搜索

4、關于join
join是將兩張表拼在一起形成一個臨時大表的操作,然后在大表里查找記錄的;因此,數據量大的話非常慢,記錄表不要join。
而且,這些被用來Join的字段,應該是相同的類型的。例如:如果你要把 DECIMAL 字段和一個 INT 字段Join在一起,MySQL就無法使用它們的索引。

5、避免 SELECT *
從數據庫里讀出越多的數據,那么查詢就會變得越慢。并且,如果你的數據庫服務器和WEB服務器是兩臺獨立的服務器的話,這還會增加網絡傳輸的負載。
所以,你應該養成一個需要什么就取什么的好的習慣。

6、永遠為每張表設置一個ID
我們應該為數據庫里的每張表都設置一個ID做為其主鍵,而且最好的是一個INT型的(推薦使用UNSIGNED),并設置上自動增加的AUTO_INCREMENT標志。

7、不要用VARCHAR 類型來當主鍵

8、使用 ENUM 而不是 VARCHAR
ENUM 類型是非常快和緊湊的。在實際上,其保存的是 TINYINT,但其外表上顯示為字符串。這樣一來,用這個字段來做一些選項列表變得相當的完美。
如果你有一個字段,比如“性別”,“國家”,“民族”,“狀態”或“部門”,你知道這些字段的取值是有限而且固定的,那么,你應該使用 ENUM 而不是 VARCHAR。

9、盡可能的使用 NOT NULL 定義字段
應該指定列為NOT NULL,除非你想存儲NULL。在MySQL中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計信息以及比較運算更加復雜。你應該用0、一個特殊的值或者一個空串代替空值。

10、固定長度的表會更快
如果表中的所有字段都是“固定長度”的,整個表會被認為是 “static” 或 “fixed-length”。 例如,表中沒有如下類型的字段: VARCHAR,TEXT,BLOB。只要你包括了其中一個這些字段,那么這個表就不是“固定長度靜態表”了,這樣,MySQL 引擎會用另一種方法來處理。
固定長度的表會提高性能,因為MySQL搜尋得會更快一些,因為這些固定的長度是很容易計算下一個數據的偏移量的,所以讀取的自然也會很快。而如果字段不是定長的,那么,每一次要找下一條的話,需要程序找到主鍵。

11、字段較多的表,使用垂直分割
比如用戶表,經常用到的字段一個表,用戶屬性分到另一個表

12、DELETE 或 INSERT 語句會鎖表
一個大的 DELETE 或 INSERT 查詢,你需要非常小心,要避免你的操作讓你的整個網站停止相應。
while (1) {
mysql_query("DELETE FROM logs WHERE log_date <= '2009-11-01' LIMIT 1000");
if (mysql_affected_rows() == 0) {
break;
}
usleep(50000);
}

13、關于索引
1、mysql一次查詢只能使用一個索引。如果要對多個字段使用索引,建立復合索引。
2、在ORDER BY操作中,MySQL只有在排序條件不是一個查詢條件表達式的情況下才使用索引。
3、MySQL索引通常是被用于WHERE,ORDER BY,GROUP BY
4、ORDER BY的索引優化:
SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort];
在[sort]這個欄位上建立索引就可以實現利用索引進行order by 優化。
5、WHERE + ORDER BY的索引優化:
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [value] ORDER BY [sort];
此sql的索引將被應用在[columnX]上,雖然[sort]有索引但是用不上,需要建立聯合索引才能使order by使用索引
create index index_name(columnX,sort);
注意:如果columnX對應多個值,如下面語句就無法利用索引來實現order by的優化
SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] IN ([value1],[value2],…) ORDER BY[sort];
6、WHERE + ORDER BY 多個字段
SELECT * FROM [table] WHERE uid=1 ORDER by x,y LIMIT 0,10;
create index index_name(uid,x,y); 注意順序,index_name(uid,x,y)支持三種索引:uid, uid+x, uid+x+y

轉載于:https://www.cnblogs.com/qixidi/p/10202488.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的mysql性能优化的一些建议的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。