【问题标题】:MySQL - Best Index and Most Efficient Select StatementMySQL - 最佳索引和最高效的 Select 语句
【发布时间】:2012-05-30 07:49:47
【问题描述】:
我有一个 MySQL 表。它有两列。第一个是唯一标识符 (INT),第二个是字符串 (VARCHAR)。大约有 170 万条记录。目前,我正在做的唯一搜索是:
select name from artist_name where name like '$q%'"
我的问题是放在这张表上的最佳索引是什么,如果有的话,我怎样才能提高 SQL 语句的效率?在某个时候,我将介绍第二个表,它将加入第一列,但我会在稍后解决这个问题。
【问题讨论】:
标签:
mysql
indexing
mysql-5.1
【解决方案1】:
看起来像在第二列 (artist_name) 上放置一个索引,以便使用 like 子句的搜索查询可以更快地工作将是最佳做法。毫无疑问,您可以在唯一标识符上添加唯一索引,如果它不存在的话。
此外,您可以考虑将索引作为部分索引,指定要搜索的艺术家姓名的长度。
查看this article 了解有关 MySql 中索引类型的详细信息。
【解决方案2】:
SphinxSearch - 全文搜索
这样做,
-
在mysql提示符下执行此查询,并记录执行时间,
选择名称
FROM 艺术家姓名
地点名称
喜欢'$q%'";
安装 sphinxsearch。
-
现在执行如下相同的查询,
选择名称
FROM 艺术家姓名
WHERE MATCH('$q');
你会看到执行时间大大减少。
我已经给出了上面的高级知识。
- 要安装 sphinx 搜索和索引您当前的表列非常
简单,是的,有一系列步骤要遵循,但一旦完成
会很幸运的。
- 我在我的应用程序中使用 sphinxsearch,其功能包括
“stopwords”、“wordforms”、“wordstemming”让你感觉很好。
其他可用选项:
1. Mysql 全文搜索:它也相当不错,如果你不是在寻找自定义任何东西,你可以通过做一个来使用 mysql 全文,
ALTER TABLE artist_name ADD FULLTEXT(name);
SELECT *
FROM artist_name
WHERE MATCH(name)
AGAINST ($q);
如果您需要有关如何安装 sphinx 搜索的任何帮助,我会在那里。
下次在您的 sql 查询中遵循正确的约定,这是 STACKOVERFLOW,而不是 FACEBOOK。