2010-03-23 115 views
4

我运行SQL查询的MySQL服务器用语... IN子句

... 
where name in ("term1","term2","term3") 

,我想每一个词从一个文本文件中获得的术语列表线。我怎样才能做到这一点?

如果这个术语列表会变大吗?例如10K。这会有效吗?或者我应该使用其他方法?可能是临时表并加入?数据库是只读的。

+0

你有PHP或Perl吗?两者都可以很好地工作,并且有一点嵌套循环疯狂 – CheeseConQueso 2010-03-23 22:48:06

+0

Perl会很好。你会展示一段代码作为答案吗? – yuk 2010-03-23 23:44:52

回答

2

我不是那么熟悉MySQL,但我看到这样的事情,你可以在一个表,你在你的问题建议加载一个文本文件: -

LOAD DATA INFILE 'file.txt' 
    INTO TABLE t1 
    (column1, column2, column3); 

,然后使用连接获取数据。

详情here

+0

我必须先创建t1表,对吧?如果数据库是只读的,我可以这样做吗? – yuk 2010-03-23 16:23:10

+0

在SQL Server中,您可以在不同的数据库中创建表,并使用DatabaseName..TableName表示法从另一个(只读)数据库中读取数据。我不太确定这是否可以在MySQL中使用。应该也可以在那里。 – 2010-03-23 17:13:50

+0

不幸的是,这个公共的MySQL服务器没有授予创建临时表或数据库的权限。 – yuk 2010-03-23 23:46:59

0

我认为你最好的选择可能是把它读入专门用于这个查找的临时表/表

通过这种方式,您可以为表格编制索引,并使用内部连接/在子查询中的位置。

1

通常,使用WHERE ... IN语句在几百个/千项之后变得非常缓慢。另外,如果表是只读的,那么你将无法添加索引以使其更快,所以,就像我说的那样,我会建议一个带有连接的临时表。