mysql 隨機優化 mysql 優化

2021-10-20 22:39:18 字數 2680 閱讀 6689

mysql優化包括兩方面,一方面是sql優化,另一方面是資料庫配置優化;

一、sql優化

1.優化資料型別

①盡量將字段設定為 not null,如果你要儲存null,手動去設定它,而不是把它設為預設值

②盡量可能的使用更小的字段,但也不要太過執著減小資料型別,要為以後的程式拓展預留一定的空間

③盡量少用varchar、text、blob型別

④如果你的資料只有你所知的少量的幾個,最好使用enum型別

2.使用索引更快的來遍歷表

3.在海量查詢時盡量不進行格式轉換

4.order by和gropu by使用order by和group by短語,任何一種索引都有助於select的效能提高

5.任何對列的操作都將導致表掃瞄,它包括資料庫函式、計算表示式等等,查詢時要盡可能將操作移至等號右邊

6.in、or子句常會使用工作表,導致索引失效。盡量避免在列上做運算,這樣也會導致索引失效。如果不產生大量重複值,可以考慮把子句拆開,拆開的子句中應該包含索引

例子如下:

如果在fields1和fields2上同時建立了索引,fields1為主索引

①以下sql會用到索引

select * from tablename1 where fields1='value1' and fields2='value2'

②而以下sql不會用到索引

select * from tablename1 where fields1='value1' or fields2='value2'

③避免在列上做運算

原語句:select*fromadmin whereyear(admin_time)>2014

優化為:select*fromadmin whereadmin_time>'2014-01-01'

7.多表查詢的優化原則:盡量將索引建立在(left join on/right join on ... +條件)條件語句中所涉及的字段上,且多表查詢比單錶查詢更能體現索引的優勢

8.索引建立原則:

①最好索引字首不重複的某一列且索引越短越好

②索引建立在查詢欄位上,而不是顯示字段

③索引應建立在那些將用於join, where判斷和order by排序的字段上,盡量不要對資料庫中某個含有大量重複的值的字段建立索引。

9.有些表如果經常insert,而較少select,就不用加索引了.不然每次寫入資料都要重新改寫索引,花費時間

10.僅列出需要查詢的字段,這對速度不會明顯的影響,主要是考慮節省應用程式伺服器的記憶體

原來語句:select * from admin

優化為:select admin_id,admin_name,admin_password from admin

11.注意使用like模糊查詢,避免使用%%,盡量在後面使用%,雙%不走索引

12.使用批量插入節省互動

原來語句:

insert into admin(admin_name,admin_password) values ('test1','pass1');

insert into admin(admin_name,admin_password) values ('test2','pass2');

insert into admin(admin_name,admin_password) values ('test3','pass3');

優化為:

insert into admin(admin_name,admin_password) values('test1','pass1'),('test2','pass2'),('test3','pass3');

13.limit的基數比較大時,使用between

原來語句:select * from admin order by admin_id limit 100000,10

優化為:  select * from admin where admin_id between 100000 and 100010 order by admin_id

14.不用使用count(id),使用count(*)

15.不要做無謂的排序,應該使用索引進行排序

16.不要使用rand()來隨機獲取多條資料

原來語句: select * from admin order by rand() limit 20

優化為: select * from admin as t1 join(select round(rand()*((select max(admin_id) from admin)-(select min(id) from admin))+(select min(id) from admin)) as id) as t2 where t1.id>=t2.id order by t1.id limit

17.使用join時候,應該用小的結果驅動大的結果(left join左邊表結果盡量小如果有條件應該放到左邊先處理,right join同理反向),同事盡量把牽涉到多表聯合的查詢拆分多個query(多個連表查詢效率低,容易到之後鎖表和阻塞)

原來語句 select * from admin left join log on admin.admin_id = log.admin_id where log.admin_id>10

優化為: select * from (select * from admin where admin_id>10) t1 left join log on t1.admin_id = log.admin_id

Mysql 優化 調優

一 慢查詢日誌 慢查詢日誌是在整個庫上做一定的慢執行sql抓取 1 設定開啟 set global slow query log 1 預設未開啟,開啟會影響效能,mysql重啟會失效 2 檢視日誌路徑和是否開啟 show variables like slow query log 3 設定閾值 se...

mysql調優措施 mysql優化措施

1 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2 應盡量避免在 where 子句中使用 或 操作符,否則將引擎放棄使用索引而進行全表掃瞄。3 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全...

mysql優化1013無標題 mysql優化

記住不要出現查詢order by,這樣嚴重影響效率,當然除了最後可以出現 datediff是日期相減得到天數 date format對日期格式化 datediff date format now y m d date format should repay date,y m d as should ...