簡體   English   中英

我應該按什么順序加入我的兩個桌子?

[英]In which order should I join my two tables?

我有以下表格:

CREATE TABLE IF NOT EXISTS "image_e"
(
    "id"    int unsigned NOT NULL AUTO_INCREMENT,
    "title" varchar(32),
    "alt"   varchar(16)  NOT NULL,

    PRIMARY KEY ("id")

)   ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_bin;

CREATE TABLE IF NOT EXISTS "image_version_e"
(
    "id"      int unsigned      NOT NULL AUTO_INCREMENT,
    "imageId" int unsigned      NOT NULL,
    "format"  varchar(4)        NOT NULL,
    "size"    int unsigned      NOT NULL,
    "width"   smallint unsigned NOT NULL,
    "height"  smallint unsigned NOT NULL,
    "src"     varchar(64)       NOT NULL,

    PRIMARY KEY ("id")

)   ENGINE = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_bin;

ALTER TABLE "image_version_e"
    ADD UNIQUE KEY ("imageId", "format", "width", "height"),
    ADD UNIQUE KEY ("src");

我想將這些連接到表以將圖像行與其關聯的圖像版本行鏈接起來。 我加入他們的順序真的很重要嗎? 如果這樣做,有什么區別:

SELECT *
FROM image_e
LEFT JOIN image_version_e
    ON image_version_e.imageId = image_e.id

代替 :

SELECT *
FROM image_version_e
LEFT JOIN image_e
    ON image_e.id = image_version_e.id

您正在執行left join因此兩個查詢之間存在很大差異。

第一個將所有記錄保留在image_e ,並將匹配的記錄image_version_eimage_version_e

第二保存在所有記錄image_version_e相匹配的記錄罪一起image_e

在這兩個中,您應該使用在語義上對您的應用程序正確的一個。

您真的很可能希望inner join

SELECT *
FROM image_e inner join
     image_version_e
     ON image_version_e.imageId = image_e.id;

對於內部聯接,聯接順序不應有所不同(編譯器將選擇認為最佳的順序)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM