Mysql常用SQL查詢語句優化方法

2021-10-03 09:09:39 字數 2250 閱讀 9375

當系統的吞吐量變大後,資料讀寫速度會變得原來越慢,因此要想辦法對sql語句進行優化。

避免引擎放棄使用索引而進行全表掃瞄:

1、對查詢進行優化,首先應考慮在 where 及 order by 涉及的列上建立索引

2、應盡量避免在 where 子句中使用!=或<>操作符

3、應盡量避免在 where 子句中對字段進行 null 值判斷,如:

select id from t where num is null
可以在num上設定預設值0,確保表中num列沒有null值,然後這樣查詢:

select id from t where num=0

4、盡量避免在 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

5、like不能前置百分號:

前置百分號將不會使用索引,,但是業務上不可避免可能又需要使用到這種形式。

例如:select id from t where name like 『%c%』

若要提高效率,可以使用locate函式或者position函式代替like查詢:

可以改為locate(『c』,name ) > 0或position(『c』 in name )>0

6、對於連續的數值,能用 between 就不要用 in

例如:select id from t where num in(1,2,3)

可以使用下面格式:

select id from t where num between 1 and 3

7、在子查詢中,表大用exists,錶小用in,等表誰都行。

8、應盡量避免在 where 子句中對字段進行表示式操作

例如:select id from t where num/2=100

應改為:

select id from t where num=100*2

9、應盡量避免在where子句中對字段進行函式操作

例如:select id from t where substring(name,1,3)=』abc』–name以abc開頭的id

select id from t where datediff(day,createdate,』2005-11-30′)=0–』2005-11-30′生成的id

應改為:

select id from t where name like 『abc%』

select id from t where createdate>=』2005-11-30′ and createdate<』2005-12-1′

10、不要在where 子句中的「=」左邊進行函式、算術運算或其他表示式運算,否則系統將可能無法正確使用索引。

文 末彩

蛋:

\color

文末彩蛋

:來自大牛的靈魂拷問:mysql有什麼好優化的?阿里的標準已經說得很清楚了,mysql做好索引就行,不要三表關聯,同時控制巢狀子查詢的層級不大於二。其他按照阿里的規範來,精力放到前端去處理,橫向的擴充套件前端應用及後端分庫。研究這些mysql非索引類的優化是方向性的錯誤。

有些業務真的複雜,不關聯的話,得分批次查詢,當查大量資料的時候就得大批量執行sql語句,效率會很低,關聯後只需要一次或幾次就行,效率會高很多,像這種怎麼解決?

複雜業務用oracle,不要用mysql。如果你用mysql處理複雜業務,就必須具備很強的前端應用分布式的能力和後端mysql橫向拆分的能力,然而這樣的擴充套件規模受限,因此現在還在這中間插入,增加了中颱的概念,把分布式能力加持在中台上,然後由中颱向前端去提供服務。總的來說超大規模的業務要省錢省力應該用oracle,花錢買oracle來簡化整個架構。

但是如果依然滿足不了效能要求,則只能轉向前面說的三層架構,那投入的人力物力將是極其巨大的,一般大企業負擔不起的。也正因為此,阿里這樣的雲服務就來廉價的提供現成的彈性雲和基礎架構來滿足業務快速膨脹的企業。對中颱這樣的三層架構來說,後端集群中的單個資料庫並不承擔效能上的主要壓力,集群中的各個資料庫也不需要保持強一致性。整個體系的能力體現在分布式規劃上。因此研究mysql單庫的效能是方向性的錯誤,一來不需要掌握這樣的技能,二來mysql先天就不適合oltp應用(聯機事務處理)。精力應該放在mysql集群方案,拆分方案,異構資料的轉換方案上來。

出處:

MySQL常用的SQL查詢語句

在mysql的學習過程中,最複雜,最考驗sql功底的就是select查詢語句了。下面總結一下在web 開發中比較實用的時期查詢sql語句。假設mysql資料庫表中時間欄位為add time,型別為datetime。1 查詢當天 1 select from article where to days ...

MySql 常用SQL語句

create database kali use kali show tables create table students sno varchar 10 primary key,sname varchar 10 not null,varchar 2 check in 男 女 age varcha...

常用sql語句(mysql)

給表新增列 sql alter table table name add column col name varchar 255 not null default default value 增加表列,指定格式 sql alter table table name add col name bool...