日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql联合查询sql优化

發布時間:2025/3/20 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql联合查询sql优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  我們在使用mysql數據庫時,經常會使用到mysql的聯合查詢,聯合查詢分為內連接和外連接,內連接查詢結果是聯合的表都存在匹配才會有結果,外連接則根據驅動表是否存在匹配來生成結果集。

這里使用mysql用例數據庫employees舉例,聯合查詢時的一些優化。這里涉及到的表主要是employees和salaries表。

mysql內連接查詢時,查詢優化器會選擇數據量較小的表作為驅動表。employees表大概是30萬的數據量,salaries則接近200萬。

我們不知道哪些表作為驅動表合適,可以使用join,讓mysql優化器幫我們做出選擇。

explain select e.emp_no, s.salary from employees e join salaries s on e.emp_no = s.emp_no order by s.salary limit 10;

explain的結果表明mysql使用employees表作為驅動表,結果集一次查詢會包含接近30萬的數據,由于要根據工資字段進行排序,這里使用到了臨時表和文件排序。這是由于mysql的聯表查詢的執行策略,是循環嵌套查詢,即mysql先在一個表中循環取出單條數據,然后再嵌套循環到下一個表中尋找匹配的行,以此類推,直到找到所有表中匹配的行為止。所對被驅動表的字段進行排序時,會產生臨時表,并采用文件排序,在數據量很大的時候效率是很慢的。

為了在排序的時候使用上索引,和不使用臨時表。我們先對salary字段建立索引。

alter table salaries add index(salary);

接著我們采用left join,使用salaries表作為驅動表。

explain select e.emp_no, s.salary from salaries s left join employees e on e.emp_no = s.emp_no order by s.salary;

  

可以看到查詢時使用了索引。結果集也會根據limit分頁來決定。

轉載于:https://www.cnblogs.com/fishisnow/p/6719439.html

總結

以上是生活随笔為你收集整理的mysql联合查询sql优化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。