我正在重写nodejs中的php应用程序。
在查询mysql数据库时,我遇到了性能问题。
我正在执行以下查询:
START TRANSACTION;
SELECT id
FROM stock
WHERE id IN (
SELECT id
FROM stock
WHERE warehouse = 1
) ORDER BY id
FOR UPDATE;
DELETE FROM stock WHERE warehouse = 1;
LOAD DATA LOCAL INFILE '/tmp/28718734728601.csv'
INTO TABLE stock FIELDS
TERMINATED BY ';'
ENCLOSED BY '"'
(sku, qty, warehouse);
COMMIT;
使用PDO在PHP中运行它需要大约3秒钟。 使用mysql或mysql2在Nodejs中运行它需要大约5秒钟。
查询是锁定stock
表上的行,并且2/3秒锁定正常,但在我的上下文中有5个或更多。
有没有人对如何提高表现有任何建议/想法?
谢谢!
答案 0 :(得分:1)
不要在SELECT中使用该子查询。 (1)效率低下,(2)不必要。
甚至没有SELECT - 您没有从中获取任何值,DELETE将立即锁定行。
仓库#1中有多少行? LOAD是否正在重新加载所有#1值?