2015-05-05 30 views
0

我对MySQL知之甚少。现在我有一个表格,有近1,000,000个条目,我希望在特定列中搜索特定的字符串并返回列。MySQL行最有效的方法?

我见过LIKE但我读过它对于如此巨大的条目很慢。我听过全文检索 - 索引它是一个更好的搜索选项。

我使用phpMyAdmin查看我的MySQL数据库。我不知道我需要对我的表格做什么确切的修改以及之后应该使用的功能?

PS:而且,是有可能的模式匹配与AGAINSTLIKE

感谢, 西

+3

*“我对MySQL知之甚少,现在我已经有一张桌子,有近1,000,000个参赛作品。”* - 那么为什么要采取像一百万个划船项目这样的大事呢?当你几乎不知道如何游泳时,很难在深处跳跃;-) –

+2

和一百万是大吗? – MatteoSp

+0

好一百万一个;现在,这是大 - 'er ;-) –

回答

2

您可以使用FULLTEXT索引,以加快搜索表。但是,它有一些限制 - 它只适用于MyISAM表(除非您使用的是MySQL 5.6.4 or newer),您需要在所有要一次搜索的列上指定它,并且只能搜索长于限制全局设置到整个数据库服务器(默认值是4个字符)

要么使用phpMyAdmin来创建索引,或者你可以做手工,语法很简单:

ALTER TABLE tablename ADD FULLTEXT (column_you_want_to_search); 

或了解更多列:

ALTER TABLE tablename ADD FULLTEXT (column1, column2, column3); 

然后你可以问的数据库,其中包含行一些话:

SELECT * FROM tablename WHERE MATCH(column_you_want_to_search) AGAINST ('search query') 
SELECT * FROM tablename WHERE MATCH(column1, column2, column3) AGAINST ('another query') 

还有一个选项,在“布尔模式”,在这里你可以指定你想要的话,不想要或使用星号作为通配符搜索。有关更多信息,请参阅this MySQL reference

+0

谢谢,这似乎是我在找的东西。任何想法多长时间有1000万条目的列表将采取这种搜索? –

+0

正如你指出的那样,说“它只适用于MyISAM”是错误的。如果人们正在运行MySQL的历史版本,那就是他们的问题。毕竟,5.6.4在2011年问世。 – tadman

+0

@tadman我同意,但我认为这仍然是一个非常重要的事实要注意。 Sai(或者其他一些可能会回答这个问题的读者)可能会运行较老的MySQL,他会困惑它为什么不起作用。 –