Re: [SQL ] select 問題
※ 引述《TonyQ (骨頭)》之銘言:
: 這樣就還蠻順利的,想問問看我原本的寫法 ,
: 是不是有造成笛卡爾乘績的疑慮,還是有什麼狀況.
: 因為in這個keyword不是個很好google的詞 , 所以上來請教~~ --;;;
剛剛做的測試
sid userId fromaddress
1 aaa 10.10.1.2
2 aaa 10.10.1.3
3 aaa 10.10.1.4
4 bbb 10.10.2.2
5 bbb 10.10.2.3
6 bbb 10.10.2.4
7 ccc 10.10.3.2
8 ccc 10.10.3.3
9 ccc 10.10.3.4
10 ddd 10.10.2.2
11 ddd 10.10.4.3
12 ddd 10.10.4.4
13 ccc 10.10.3.5
14 aaa 10.10.4.2
15 ccc 10.10.1.2
顯示記錄 0 - 4 (5 總計, 查詢需時 0.0007 秒)
SELECT u1. *
FROM `test` u1
WHERE u1.fromaddress
IN (
SELECT DISTINCT u2.fromaddress
FROM `test` u2
WHERE u2.userid = 'aaa'
)
LIMIT 0 , 30
顯示記錄 0 - 3 (4 總計, 查詢需時 0.0001 秒)
SELECT DISTINCT u2.fromaddress
FROM `test` u2
WHERE u2.userid = 'aaa'
LIMIT 0 , 30
顯示記錄 0 - 4 (5 總計, 查詢需時 0.0003 秒)
SELECT u1. *
FROM `test` u1
WHERE u1.fromaddress
IN (
'10.10.1.2', '10.10.1.3', '10.10.1.4', '10.10.4.2'
)
LIMIT 0 , 30
1 aaa 10.10.1.2
2 aaa 10.10.1.3
3 aaa 10.10.1.4
14 aaa 10.10.4.2
15 ccc 10.10.1.2
很顯然的印證了 O'Reilly 的 《PHP與MySQL應用實務》 ISBN:986-7794-68-0
當中 ch15 對 IN 子句所作的描述
「若在 MySQL 中執行此查詢,會發現執行速度很慢,因為 MySQL 仍不善於
巢狀查詢的最佳化。」(此查詢指書上的範例)
我想可能是這樣吧… 不過兩個方法得到的東西是一樣的就是了…
後記:
執行
SELECT u1.* FROM `test` u1 where u1.fromaddress in(
select distinct u2.fromaddress from `test` u2 where u2.userid='aaa'
)
顯示記錄 0 - 4 (5 總計, 查詢需時 0.0001 秒)
跟
SELECT u1. *
FROM `test` u1
WHERE u1.fromaddress
IN (
SELECT DISTINCT u2.fromaddress
FROM `test` u2
WHERE u2.userid = 'aaa'
)
顯示記錄 0 - 4 (5 總計, 查詢需時 0.0007 秒)
的時間竟然有差… 一個只是有排版,一個沒排版…
不過 phase 的時間應該不會影響結果吧…
我猜是資料量太多所以用 IN 子句效率就會減低。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.161.232.122
※ 編輯: chrisQQ 來自: 118.161.232.122 (07/05 10:50)
推
07/05 22:43, , 1F
07/05 22:43, 1F
推
07/06 00:31, , 2F
07/06 00:31, 2F
推
07/06 01:05, , 3F
07/06 01:05, 3F
→
07/09 19:33, , 4F
07/09 19:33, 4F
討論串 (同標題文章)
Database 近期熱門文章
PTT數位生活區 即時熱門文章