MySQL 行的最有效方式?
Most efficient way of MySQL rows?
我对MySQL知之甚少。现在我有一个 table 接近 1,000,000 个条目,我希望在特定列和 return 列中搜索特定字符串。
我看过LIKE
,但是对于这么大的条目,我读起来很慢。我听说全文索引是搜索的更好选择。
我使用 phpMyAdmin 查看我的 MySQL 数据库。我不知道我需要对我的 table 以及此后应该使用的功能进行哪些具体修改?
PS: 另外,是否可以像 LIKE
那样与 AGAINST
进行模式匹配
您可以使用 FULLTEXT 索引来加快搜索 table。然而,它有一些限制——它只适用于 MyISAM tables(除非你使用 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')
在 "boolean mode" 中还有一个搜索选项,您可以在其中指定要搜索的词、不需要的词或使用星号作为通配符。有关更多信息,请参阅 this MySQL reference。
我对MySQL知之甚少。现在我有一个 table 接近 1,000,000 个条目,我希望在特定列和 return 列中搜索特定字符串。
我看过LIKE
,但是对于这么大的条目,我读起来很慢。我听说全文索引是搜索的更好选择。
我使用 phpMyAdmin 查看我的 MySQL 数据库。我不知道我需要对我的 table 以及此后应该使用的功能进行哪些具体修改?
PS: 另外,是否可以像 LIKE
AGAINST
进行模式匹配
您可以使用 FULLTEXT 索引来加快搜索 table。然而,它有一些限制——它只适用于 MyISAM tables(除非你使用 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')
在 "boolean mode" 中还有一个搜索选项,您可以在其中指定要搜索的词、不需要的词或使用星号作为通配符。有关更多信息,请参阅 this MySQL reference。