MySQL SQL優(yōu)化

1.大多數(shù)情況,MySQL會將獨立子查詢轉化為相關子查詢,這樣就影響了SQL執(zhí)行效率。

select name from student where id in (select student_id from lesson );
select name from student where exists (select 1 from lesson where student.id = lesson.student_id);

如上,MySQL的優(yōu)化器會將 in 的獨立子查詢優(yōu)化為exists的相關子查詢。執(zhí)行效率變?yōu)镺(N+M*N)而不是O(N+M)。我們可以具體優(yōu)化相關子查詢的參數(shù)條件來優(yōu)化。

2.可以用explain 查看SQL具體的如何執(zhí)行的參數(shù),和具體如何執(zhí)行的 explain extended詳解

3.查看慢查詢?nèi)罩荆榭次锢鞩O 邏輯IO次數(shù),top 10。

4.關聯(lián)子查詢優(yōu)化,建唯一索引,使用派生表(避免相關子查詢和外部查詢的多次比較操作)。

select orderid,customerid,emploeeid,orderdate,requireddate from orders as a 
where orderdate=(select max(orderdate) from orders as b where a.employeeid=b.employeeid);

建立索引
create unique indes idx_empid_od_rd_oid on orders(employeeid,orderdate,requireddate,orderid)
使用派生表

select a.orderid,a.customerid,a.employeeid,b.orderdate,requireddate from orders as a,
(select employeeid,max(orderdate) as orderdate from orderd group by employeeid) as b
where a.employeeid=b.employeeid and a.orderdate=b.orderdate;
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容