我看到SELECT EXISTS
用了很多,如:SELECT EXISTS與LIMIT 1
if db.query("""
SELECT EXISTS (
SELECT 1 FROM checkout
WHERE checkout_id = %s
)
""" % checkout_id).getresult()[0][0] == 't':
與我喜歡:
if db.query("""
SELECT 1 FROM checkout
WHERE checkout_id = %s
LIMIT 1
""" % checkout_id).getresult():
哪一個更好呢?
P.S.我正在使用Python和PosgreSQL。
cert=> explain SELECT EXISTS (SELECT 1 FROM checkout WHERE checkout_id = 3);
QUERY PLAN
--------------------------------------------------------------------------------------
Result (cost=4.03..4.03 rows=1 width=0)
InitPlan
-> Index Scan using checkout_pkey on checkout (cost=0.00..4.03 rows=1 width=0)
Index Cond: (checkout_id = 3)
(4 rows)
cert=> explain SELECT 1 FROM checkout WHERE checkout_id = 3 limit 1;
QUERY PLAN
------------------------------------------------------------------------------------
Limit (cost=0.00..4.03 rows=1 width=0)
-> Index Scan using checkout_pkey on checkout (cost=0.00..4.03 rows=1 width=0)
Index Cond: (checkout_id = 3)
(3 rows)
我的觀點是,爲什麼從結果得到一個行和檢查它是否是第一列是真的,如果我可以檢查是否有任何行所有,這意味着相同的?
您正在使用哪些DBMS? –
絕對不是SQL Server。 LIMIT 1告訴我這可能是mysql(只是猜測) – Alex
PostgreSQL爲這兩個版本生成(幾乎)相同的執行計劃。所以他們之間不應該有區別 –