我们的代码使用创建/删除表,同时在我们的数据库中生成VR4队列订单。
当网站数量少于250时,代码使用IN运算符并生成报告。 ce.website_id in (" . (join ",", @{$website_id}) . ")
当我们有超过250个网站时,我们的代码就是创建表格(名称类似于Temp_tablename)并使用表格连接而不是IN运算符。我可以替换此代码以使用IN运算符吗?如果IN运算符使用更多输入值,是否会出现性能问题?
答案 0 :(得分:1)
正如斯坦所提到的,使用临时表而不是大型 IN 是首选方式。
当MySQL从用户获取大数据块时,它会将其存储在临时表中,并使用 JOIN 来查看它。对于MySQL来说,更容易比在 IN SQL部分中实际查找每个值都要容易。
您可以跳过此临时表,首先将您的网站列表存储在表格中:
REPLACE INTO tblWebSitesToHandle
(Session_ID, WebSite)
VALUES
('**unique_number**', '**website_id**'),
('**unique_number**', '**website_id**'), ...
unique_number 将是您选择的某个数字,然后在查询结束后再折腾 - 但它会帮助您管理要处理查询的网站列表
然后在您当前使用的SQL中,而不是 IN(...),您将对此表执行 JOIN 并从中选择相关的 Session_ID 记录。
完成后,只需从 tblWebSitesToHandle 中删除Session_ID数据,就不再需要它了(我相信)。