有人可以解释为什么这个带有超过5000条记录的IN子句的查询太慢了吗?
表格结构
SELECT wp_id,objectId FROM wp_transactions_log WHERE `operation` = "insert" AND `wp_id` != 0 AND `status` != "ignore" AND `table_name` ='itg_wpclass_dates' AND objectId IN (... 5k record)
此表包含5k记录。
查询:
SELECT wp_id,objectId FROM wp_transactions_log WHERE objectId IN (5k record)
即使这个查询也一样:
{{1}}
注意:IN子句中的所有参数在表行中本身是相同的。 我的意思是速度慢超过15秒。
答案 0 :(得分:2)
objectid未编入索引。复合主键仅被索引。在objectid上添加索引,然后尝试。
ALTER TABLE wp_transactions_log ADD INDEX (objectid);
虽然如果您有大量数据,那么添加索引会锁定您的元数据,使用 INPLACE 算法以最小的锁争用来执行此操作。
此外,在您选择语句之前,只需添加Explain并向我们提供响应。这将是识别表格中问题的一个很好的指标。
答案 1 :(得分:0)
查询速度很快,需要200ms才能完成,但处理查询和检索数据的时间很长。我认为没有办法减少这段时间。