1. 程式人生 > >關於mysql的性能優化

關於mysql的性能優化

開啟 show 選擇 優化插入 order 必須 sele 重建索引 mysq

1.用 show status like ‘value‘ 查詢mysql數據庫性能

2. 用 EXPLAIN select * from table 或 DESCRIBE select * from table 查看執行計劃

3.使用索引

--使用 like關鍵字時 like ‘%le‘索引不起作用,但 like ‘le%‘索引可以起作用

 -- 使用關鍵字or時要求兩個字段必須同為索引,否則索引不起作用

4:優化數據庫結構

  有些表在設計時設置了很多字段,但部分字段使用頻率很低,當這些表的數據量很大時查詢數據的速度就會很慢

  1. 可以將其分解為多個表

  2.增加中間表 --如果經常聯表查詢會降低mysql數據庫的查詢速度,可以將經常查詢的字段放在中間表中

5:優化插入速度

  1 .先禁用索引, 然後重啟開啟索引 -- alter table 表名 disable keys -- alter table 表名enable keys

  2. 禁用唯一性檢查 set unique_checks=0 --set unique_checks=1

  3.insert 語句用一個insert插入多個語句,而不是多次insert

  4.分析表、檢查表、優化表

  

多表關聯查詢:
1.內連接:inner join或者不加鏈接符
2.外鏈接:左外鏈接:left join ;右外鏈接;right join;
3.子查詢:in ;比較運算符:=,!=,>=,>,<,<=;exists;any:只要滿足內層查詢結果集中的任意一個;
4:合並查詢結果:union 去除相同記錄;union all 不去重;
查詢優化:
1.創建表的時候,字段盡可能的小;
2.關聯查詢時,業務特性相同的字段數據類型也應該相同。
3.使用索引:索引應建立在那些將用於JOIN,WHERE判斷和ORDERBY排序的字段上。盡量不要對數據庫中某個含有大量重復的值的字段建立索引;
4.用explain describe查看執行計劃
5.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
6.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num is null
可以在num上設置默認值0,確保表中num列沒有null值,然後這樣查詢:
select id from t where num=0
7.應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描,如:
select id from t where num=10 or num=20
可以這樣查詢:
select id from t where num=10
union all
select id from t where num=20
8.in 和 not in 也要慎用,否則會導致全表掃描
9.應盡量避免在 where 子句中對字段進行表達式操作或函數操作,應該對參數進行表達式操作或函數操作
10.不要在 where 子句中的“=”左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引;
13.很多時候用 exists 代替 in 是一個好的選擇:
select num from a where num in(select num from b)
select num from a where exists(select 1 from b where num=a.num)
14:索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,
因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數最好不要超過6個,
若太多則應考慮一些不常使用到的列上建的索引是否有必要。
15 :任何地方都不要使用 select * from t ,用具體的字段列表代替“*”,不要返回用不到的任何字段。

 

關於mysql的性能優化