【发布时间】:2010-07-31 13:43:41
【问题描述】:
我有一个包含约 1M 行的表。我的应用程序有一个属于该表的大约 10 万个 ID 的列表(该列表由应用程序层生成)。
是否有查询所有这些 ID 的通用方法? ~100K 选择查询?我向其中插入约 100K ID 的临时表,并通过连接所需的表来选择查询?
谢谢, 多里酒吧
【问题讨论】:
我有一个包含约 1M 行的表。我的应用程序有一个属于该表的大约 10 万个 ID 的列表(该列表由应用程序层生成)。
是否有查询所有这些 ID 的通用方法? ~100K 选择查询?我向其中插入约 100K ID 的临时表,并通过连接所需的表来选择查询?
谢谢, 多里酒吧
【问题讨论】:
你可以在一个查询中完成,比如
SELECT * FROM large_table WHERE id IN (...)
在我放置...的位置插入一个逗号分隔的 ID 列表 不幸的是,据我所知,没有简单的方法可以对其进行参数化,因此您需要格外小心以避免 SQL 注入漏洞。
【讨论】:
保存 100k ID 的临时表似乎是一个不错的解决方案。不过不要一一插入; MySQL 中的 INSERT ... VALUES 语法接受多行的插入。
顺便问一下,如果不是从数据库中获得的 100k ID,您从哪里获得?如果它们来自前面的请求,我建议让它填充临时表。
编辑:对于更便携的多次插入方式:
INSERT INTO mytable (col1, col2) SELECT 'foo', 0 UNION SELECT 'bar', 1
【讨论】:
这些 id 是否实际上引用了具有 1M 行的表?
如果是这样,您可以使用 SELECT * ids FROM
其中 ids 是 ID 列,其中“1M table”是包含 1M 行的表的名称。
但我不认为我真的明白你的问题......
【讨论】: