0

我有一个 MySQL 表。它有两列。第一个是唯一标识符 (INT),第二个是字符串 (VARCHAR)。大约有 170 万条记录。目前,我正在做的唯一搜索是:

select name from artist_name where name like '$q%'"

我的问题是放在这张表上的最佳索引是什么,如果有的话,我怎样才能提高 SQL 语句的效率?在某个时候,我将介绍第二个表,它将加入第一列,但我会在稍后解决这个问题。

4

3 回答 3

0

最好在第二列 ( ) 上放置索引,artist_name以便使用like子句的搜索查询可以更快地工作,这将是最佳做法。毫无疑问,您可以在唯一标识符上添加唯一索引,如果它不存在的话。

此外,您可以考虑将索引作为部分索引,指定要搜索的艺术家姓名的长度。

查看这篇文章以获取有关 MySql 中索引类型的详细信息。

于 2012-05-30T08:14:44.090 回答
0

SphinxSearch - 全文搜索

做这个,

  1. 在mysql提示符下执行此查询并记录执行时间,

    从艺术家名称中选择名称,其中名称如“$q%””;

  2. 安装狮身人面像搜索。

  3. 现在执行如下相同的查询,

    从艺术家名称中选择名称 WHERE MATCH('$q');

您将看到执行时间显着减少。

我在上面给出了高层次的知识。

  1. 要安装 sphinx 搜索和索引您当前的表列非常容易,是的,有一系列步骤要遵循,但一旦完成,您会很幸运。
  2. 我在我的应用程序中使用 sphinxsearch,“停用词”、“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。

于 2012-05-30T10:42:28.053 回答
-1

使用B 树索引

检查这个

于 2012-05-30T08:02:55.443 回答