[英]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_e
在image_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.