我正在尝试优化我的代码,但我不太清楚我正在尝试的方法是否可行,或者我应该检查一下其他的东西,我希望你能帮我一下。
所以基本上我有一个与此类似的 Mysql 选择:
SELECT COUNT(*) as book_orders
FROM book_sales
WHERE book_number = ?
AND purchase_date > ? (timestamp)
我有一个包含 bookNumbers 和匹配 pruchaseDates 的列表,现在,我正在为每个数字发送一个 Select,这听起来没有必要,因为理论上,可以创建一个列表并使用 1 个选择完成所有这些。
SELECT COUNT(*)
FROM book_sales
WHERE book_number IN (1,2,3,4)
AND purchase_date > ?
GROUP BY book_number
设置purchase_date后,它将根据purchase_date过滤所有book_sales,但我想将列表中的每个元素过滤到特定日期,如下所示:
book_number => 1 purchase_date => 1412
book_number => 2 purchase_date => 1621
book_number => 3 purchase_date => 1014
book_number => 4 purchase_date => 1978
我尝试了一个像所示的子查询,但它太低,无法处理太多数据
SELECT * FROM
(SELECT * FROM book_sales WHERE book_number = 1 AND purchase_date > 1412) AS bk1,
....
...
将您的条件对保存到 temptable 并加入它:
CREATE TEMPORARY TABLE tmp ( book_number INT
, purchase_date INT
-- define PK only if the amount of pairs is over 10 - it can improve
-- , PRIMARY KEY (book_number, purchase_date)
) ENGINE = Memory
SELECT 1 book_number, 1412 purchase_date UNION ALL
SELECT 2, 1621
SELECT 3, 1014
SELECT 4, 1978;
进而
SELECT COUNT(*)
FROM book_sales
JOIN tmp ON book_sales.book_number = tmp.book_number
AND book_sales.purchase_date > tmp.purchase_date;
或者,如果 MySQL 版本允许,则使用 CTE 执行相同操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句