-1

我们的代码使用创建/删除表,同时在我们的数据库中生成 VR4 队列订单。

当网站数量少于 250 个时,代码使用 IN 运算符并生成报告。 ce.website_id in (" . (join ",", @{$website_id}) . ")

当我们有超过 250 个网站时,我们的代码正在创建表(名称如 Temp_tablename)并使用表连接而不是 IN 运算符。我可以替换此代码以使用 IN 运算符吗?如果 IN 运算符与更多输入值一起使用,会有任何性能问题吗?

4

1 回答 1

1

正如 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 数据,就不再需要它了(我相信)。

于 2013-07-03T06:22:42.747 回答