亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

MySQL檢視是否比複雜查詢更有效率?
P粉237689596
P粉237689596 2024-01-10 17:09:15
0
1
537

我在使用多個(gè)內(nèi)連接的SELECT語(yǔ)句時(shí)遇到了問(wèn)題。我的程式碼如下:

SELECT `movies02`.`id`, `movies02`.`title`,
       `movies03`.`talent`, 
       `movies07`.`character`,
       `movies05`.`genre`
  FROM `movies02`
 INNER JOIN `movies07` ON `movies07`.`movie` = `movies02`.`id`
 INNER JOIN `movies03` ON `movies03`.`id` = `movies07`.`performer`
 INNER JOIN `movies08` ON `movies08`.`genre` = `movies05`.`id`
 INNER JOIN `movies02` ON `movies08`.`movie` = `movies02`.`id`;

使用INNER JOIN獲取電影中的演員以及他們扮演的角色似乎可以工作,但是獲取電影類(lèi)型的後兩個(gè)連接不起作用,所以我想我可以將它們寫(xiě)成一個(gè)視圖,然後在輸出結(jié)果時(shí)將它們組合起來(lái)。因此,我最終會(huì)得到三個(gè)視圖。一個(gè)用於獲取類(lèi)型、演員和角色,然後一個(gè)用於將所有內(nèi)容組合在一起。問(wèn)題是,這樣做是否比使用一個(gè)大型的SELECT語(yǔ)句和多個(gè)連接更好?

我嘗試了多次重寫(xiě)查詢,並以多種方式進(jìn)行了嘗試

P粉237689596
P粉237689596

全部回覆(1)
P粉827121558

當(dāng)你執(zhí)行涉及視圖的查詢時(shí),MySQL / MariaDB的查詢計(jì)劃器會(huì)將所有視圖和主查詢組合成一個(gè)單獨(dú)的查詢,然後再?zèng)Q定如何存取表。因此,使用視圖、公共表達(dá)式和/或子查詢時(shí),效能基本上相同。

也就是說(shuō),視圖是封裝一些查詢複雜性的有用方式。

而且,您可以授予部分受信任的使用者對(duì)視圖的存取權(quán)限,而無(wú)需授予他們對(duì)底層表的存取權(quán)限。

視圖的缺點(diǎn)與將任何應(yīng)用邏輯放入資料庫(kù)管理系統(tǒng)而不是應(yīng)用程式中的缺點(diǎn)相同:更新更加棘手,更容易忘記更新。 (如果您有一個(gè)可靠的應(yīng)用程式更新工作流程,可以在更新應(yīng)用程式程式碼時(shí)更新視圖、儲(chǔ)存函數(shù)和預(yù)存過(guò)程,則此問(wèn)題不相關(guān)。)

也就是說(shuō),編寫(xiě)此類(lèi)查詢的一個(gè)好方法是從包含「頂級(jí)」實(shí)體的表開(kāi)始。在您的情況下,我認(rèn)為是電影。然後使用LEFT JOIN連接其他表,而不是使用INNER JOIN。這樣,即使某些子實(shí)體(演員、類(lèi)型等)缺失,您仍然可以在結(jié)果中看到電影。

專業(yè)提示:如果可以的話,為包含的實(shí)體(電影、類(lèi)型、演員等)命名表,而不是使用whatever01、whatever02之類(lèi)別的名稱。能夠查看查詢並進(jìn)行推理非常重要,而表名可以使這一點(diǎn)更容易。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板