我们的代码使用创建/删除表,同时在我们的数据库中生成 VR4 队列订单。
当网站数量少于 250 个时,代码使用 IN 运算符并生成报告。 ce.website_id in (" . (join ",", @{$website_id}) . ")
当我们有超过 250 个网站时,我们的代码正在创建表(名称如 Temp_tablename)并使用表连接而不是 IN 运算符。我可以替换此代码以使用 IN 运算符吗?如果 IN 运算符与更多输入值一起使用,会有任何性能问题吗?
正如 Stan 所提到的,使用临时表而不是大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 数据,就不再需要它了(我相信)。