0
這裏我精簡的情況查詢的限制約束傳播到子查詢
create table t1 (i integer, d text);
insert into t1 values (0,'aa0');
insert into t1 values (1,'aa1');
insert into t1 values (2,'aa2');
insert into t1 values (3,'aa3');
insert into t1 values (4,'aa4');
insert into t1 values (5,'aa5');
insert into t1 values (6,'aa6');
insert into t1 values (7,'aa7');
insert into t1 values (8,'aa8');
insert into t1 values (9,'aa9');
create table t2 (i integer, e text);
insert into t2 values (0,'aa0');
insert into t2 values (1,'ba1');
insert into t2 values (2,'aa2');
insert into t2 values (3,'ba3');
insert into t2 values (4,'aa4');
insert into t2 values (5,'ba5');
insert into t2 values (6,'aa6');
insert into t2 values (7,'ba7');
insert into t2 values (8,'aa8');
insert into t2 values (9,'ba9');
然後我有一個外部SELECT,其目的是打印出來的表格T1的ID的選擇列表(我)
select d from t1 where i in (3,4) limit 4;
d
----
aa3
aa4
的ID集,產生這樣就可以與
select d from t1 where i in (3,4,1,6,7) limit 4;
d
----
aa1
aa3
aa4
aa6
最終有時ID組是內SEL的結果ECT子查詢這樣
select d from t1 where i in (select i from t2 where e>'b') limit 4;
d
----
aa1
aa3
aa5
aa7
在我的現實情況下,T1和T2是大和內SELECT可以產生一個很大的ID列表,即外部選擇將其限制約束核彈。
我的問題是,查詢優化器是否檢測到這個outrent limit constrainst並將其傳播到內部select中?
如果答案是否定的,那麼我應該走一英里和我的查詢生成器,得到了明確的移動限制約束的內部SELECT這樣
select d from t1 where i in (select i from t2 where e>'b' limit 4);
d
----
aa1
aa3
aa5
aa7
問我看着EXPLAIN並解釋查詢之前計劃,但這是超出我的知識,不能從那裏回答。
Thanx CL爲即時回覆。那麼我會照顧LIMIT的位置。在我的情況下,限制只是驗證查詢的一種方式。順序是不相關的,所選擇的ID在內部的選擇是一個正則表達式匹配,則該列表匹配的列表。這有點像「grep foo bifgile | head -4」。我不流利的EXPLAIN的是,和我的實際情況是真正的大,有很多測試沒有發現測試。 – Phi
我應該使用EXPLAIN在我的小測試在這裏,我們對此深感抱歉。 – Phi
你並沒有真正理解EXPLAIN輸出...... –