中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySql數據庫單表查詢與多表連接查詢有哪些區別

發布時間:2021-09-28 09:21:49 來源:億速云 閱讀:902 作者:iii 欄目:開發技術

本篇內容主要講解“MySql數據庫單表查詢與多表連接查詢有哪些區別”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“MySql數據庫單表查詢與多表連接查詢有哪些區別”吧!

一、《高性能mysql》中的回答

很多高性能的應用都會對關聯查詢進行分解。簡單地,可以對每個表進行一次單表查詢,然后將結果在應用程序中進行關聯。例如,下面這個查詢:

select * from tag
join tag_post on tag_post.tag_id=tag.id
join post on tag_post.post_id=post.id
where tag.tag='mysql';

可以分解成下面這些查詢來代替:

Select * from tag where tag='mysql';
Select * from tag_post where tag_id=1234;
Select * from post where id in(123,456,567,9989,8909);

到底為什么要這樣做?

咋一看,這樣做并沒有什么好處,原本一條查詢,這里卻變成了多條查詢,返回結果又是一模一樣。

事實上,用分解關聯查詢的方式重構查詢具有如下優勢:(高并發、高性能的應用中,一般建議使用單表查詢)
1. 讓緩存的效率更高。許多應用程序可以方便地緩存單表查詢對應的結果對象。另外對于MySQL的查詢緩存來說,如果關聯中的某個表發生了變化,那么就無法使用查詢緩存了,而拆分后,如果某個表很少改變,那么基于該表的查詢就可以重復利用查詢緩存結果了。

2. 將查詢分解后,執行單個查詢可以減少鎖的競爭。

3. 在應用層做關聯,可以更容易對數據庫進行拆分,更容易做到高性能和可擴展。

4. 查詢本身效率也可能會有所提升。

5. 可以減少冗余記錄的查詢。

6. 更進一步,這樣做相當于在應用中實現了哈希關聯,而不是使用MySQL的嵌套環關聯,某些場景哈希關聯的效率更高很多。

7. 單表查詢有利于后期數據量大了分庫分表,如果聯合查詢的話,一旦分庫,原來的sql都需要改動。

8. 上次看到某個CTO技術分享,公司規定底層禁止用join聯合查詢。數據大的時候確實慢。

9. 聯合查詢或許確實快,但是mysql的資源通常比程序代碼的資源緊張的多。

二、其他的一些回答

情景假設:假設網站有一個公司庫版塊,我想搜索某城市的所有公司。

數據表:tbl_company (t1)、 tbl_city (t2)。

例1:

t1表中存cityid 根據id做表連接查詢

select * from t1 inner join t2 on t1.cityid=t2.cityid;

例2:

t1表中存cityName 用戶前臺點擊上海市,則把上海市的id傳到后臺(不考慮傳cityName),

根據id查出cityName select cityName from t2 where cityid= #{cityid};

然后 select * from t1 where cityName = #{cityName};

兩者區別:例1中只做了一次表關聯查詢,例2中分別做了兩次單表查詢。

考慮到數據量大,多表連接查詢會影響查詢效率所以都優化為單表查詢。 TP:以上是在不使用索引的情況下

請問哪種效率會更高些?

答:sql優化與業務也有關系,這條語句的查詢會不會頻繁,要不要考慮2次連接帶來的開銷,如果這些都不用考慮的話,都沒有索引的情況下,感覺相差不大,2應該略優于1。

數據沒有特別大的情況還是級聯查詢快。

對于傳統的數據庫涉及來說, 盡可能減少數據庫查詢次數.

BUT, 1. mysql都對處理連接/斷開連接, 回復小而簡單的 查詢是非常快的; 2.現在的網絡已經非常快了. 所以多個小的查詢對mysql來說可能更快一些.

最后, 大神也沒有結論哪個更好. 呵呵, 其實整本書都明確表達一個意思, 測試測試! 做benchmark! 對于自己的數據環境, 把兩種方式都測試一下. 用數據說話.

到此,相信大家對“MySql數據庫單表查詢與多表連接查詢有哪些區別”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陇川县| 琼结县| 平乐县| 新安县| 特克斯县| 武宁县| 平昌县| 南投市| 玉龙| 拉萨市| 盐边县| 防城港市| 赫章县| 剑河县| 江都市| 云和县| 敦化市| 海淀区| 蓝田县| 沾化县| 上杭县| 石棉县| 阿拉善右旗| 曲周县| 南澳县| 库尔勒市| 年辖:市辖区| 宁乡县| 美姑县| 仁化县| 米易县| 墨玉县| 班玛县| 黎城县| 阳谷县| 蒙城县| 大余县| 绥中县| 离岛区| 涞源县| 彰化市|