我想在資料庫中查詢使用姓名和出生日期的人員串列。要查詢的人員串列由用戶在 Python 中提供,我的代碼構造了要提交到資料庫的查詢字串。我正在使用類似于以下查詢的內容:
SELECT * FROM table WHERE
(name = 'Alice' AND dob = '2000/01/01') OR
(name = 'Bob' AND dob = '2000/01/02') OR
(name = 'Charlie' AND dob = '2000/01/03') OR ...
這樣做沒問題,但是當數百人使用相同數量的 WHERE 子句由 OR 分隔時會變得很慢。有什么辦法可以使這個查詢更有效嗎?我讀到使用一個沒有 OR 的 WHERE 子句使用 IN 可能會更快,但我無法識別如何合并出生日期:
SELECT * FROM table WHERE name IN('Alice', 'Bob', 'Charlie',...) AND dob IN()
并且以某種方式需要將出生日期與他們各自的名字相匹配。任何提高查詢性能的好解決方案?
uj5u.com熱心網友回復:
將專案插入到保留表中,然后加入到該表中。您可以將表定義為還包含每個事件或會話的唯一值。
uj5u.com熱心網友回復:
您還可以將兩個欄位放在一個IN() 中,例如:
SELECT * FROM table WHERE
(name,dob) IN (
('Alice','2000/01/01')
,('Bob', '2000/01/02')
,('Charlie', '2000/01/03')
);
并在兩個欄位name和dob 上創建一個復合索引
uj5u.com熱心網友回復:
您可以創建一個TEMPORARY TABLE并批量插入搜索到的元組。然后您可以連接兩個表,或使用子選擇查詢。您應該至少在其中一個表中的兩個欄位上有一個復合索引。
Bernd 建議使用一種更簡單的方法,它可能會很好地作業。
無論哪種方式,請記住您可能應該使用動態引數,以避免潛在的SQL 注入攻擊。如果使用(臨時)表,請使用 INSERT 查詢的引數。否則,為IN子句。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/338963.html
