mysql優化建議

2021-08-27 11:38:32 字數 1480 閱讀 2923

mysql優化:

1, 整數型索引優於字元型索引

2, 在長度夠用的情況下,盡可能用較小字段,能用int,就不用bigint,能用varchar(50),不用varchar(500);這樣可以節約更多的資源

3, 即使varchar(1000) 和varchar(100)在儲存相同長字元的時候,占用儲存空間一樣,但因為1000會預留部分磁碟空間,所以會產生更多碎片;

memory儲存引擎(臨時表) 不支援動態行,所以varchar(1000)會被內部轉換成char(1000),所以varchar(1000)會比varchar(100)占用更多記憶體;

4, optimize table會讓表資料重新排列,從而消除碎片

5, 不要建立重複索引,不要建立多餘索引(a,b)和(a),(a)是多餘索引

6, 如果字串長度比較長,又需要作為檢索條件,可以使用部分索引(a(n)),select count(distinct left(字段,n))/count(*) as alias from tbname

7, 除非真要儲存null,否則就定義not null,default '';

當null被處理的時候,每一條記錄都需要額外的乙個位元組

mysql內部還需要特殊處理;

還會導致固定大小的索引變成可變大小索引;

8, 盡量不要使用blob和text;memory引擎(臨時表)不支援blob和text,db會使用磁碟的myisam臨時表,導致嚴重效能開銷;  

如果無法避免blob/text,檢索時可以使用left(str, length);right(str, length) ;substring(str, pos) ;substring(str, pos, length) 轉換為字串

9,使用enum代替字串型別; 如果字串個數是有限的幾個,可以儲存為enum;db內部會將其儲存為整數,被檢索時會自動轉換為字串

10, timestamp 占用4位元組,datetime占用8位元組,timestamp效能更好

11, 儲存ip位址,可以使用函式inet_aton()和inet_ntoa()將ip轉換成整型儲存,提公升效能

12, 索引的時候,要對索引字段使用隔離列; index + 1 = 5 不會使用索引,index = 5 - 1會

13, 使用覆蓋索引效能更好explain extra:"using index"

14, 如果索引太多,會對insert,update,delete等有較大影響,因為mysql需要維護索引;

15, 如果where有多個範圍條件查詢,則mysql能為第乙個範圍使用索引,無法為第二個使用

16, extra出現: select tables optimized away,最優的,mysql無需查詢可以直接讀取資料

17, myisam會把表的總行數儲存,而innodb需要進行查詢;(可以explain驗證)

18, in()和 or在mysql中不相等,mysql 對in() 中資料進行排序,然後用二分法查詢資料是否在裡面,列表很大的時候or會慢的多;

mysql優化建議

1.建立 2.sql編寫mysql欄位型別 資料型別 含義date 3位元組,日期,格式 2014 09 18 time 3位元組,時間,格式 08 42 30 datetime 8位元組,日期時間,格式 2014 09 18 08 42 30 timestamp 4位元組,自動儲存記錄修改的時間 ...

MySQL優化建議

設計資料表的時候要遵守三正規化,但是不要嚴格遵守。可以適度打破正規化。乙個表字段不適合過多。常用表中只要保留常用的字段 盡量給每個字段新增not null 根據表的特點來選擇合適的表引擎,如果這個表經常被寫,應該選擇innodb,但是mysql5.6一般都是選擇innodb 根據表存放的資料來決定字...

mysql優化建議

sql優化判斷 1.首先是定位效率比較低的sql語句 2.使用explain分析低效sql的執行計畫 type const system 單錶中最多有乙個匹配行 type eq ref 使用唯一索引,對於每個索引鍵值,表中只有一條記錄匹配 type ref 使用的是非唯一索引或者字首索引掃瞄,返回匹...