MySQL - 最佳索引和最有效的选择声明

时间:2012-05-30 07:49:48

标签: mysql indexing mysql-5.1

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

检查this article以获取有关MySql中索引类型的详细信息。

答案 1 :(得分:0)

SphinxSearch - 全文搜索

这样做,

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

    SELECT名称 来自artist_name 姓名 像'$ q%'“;

  2. 安装sphinxsearch。

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

    SELECT名称 来自artist_name MATERE MATCH('$ q');

  4. 您将看到执行时间减少到天文数字。

    我已经给出了高级知识。

    1. 要安装sphinx搜索和索引当前表列非常 很容易,是的,有一系列的步骤要遵循,但一旦完成你 将是幸运的。
    2. 我在我的应用程序中使用sphinxsearch,以及类似的功能 “stopwords”,“wordforms”,“wordstemming”让你感觉很好。
    3. 其他可用选项:

      1。 Mysql全文搜索:它也相当不错,如果你不是在寻找任何你可以使用mysql全文的东西,只需要做一个,

      ALTER TABLE artist_name ADD FULLTEXT(name);
      
      SELECT * 
      FROM artist_name
      WHERE MATCH(name) 
      AGAINST ($q);
      

      如果您需要有关如何安装sphinx搜索的任何帮助,我会在那里。

      下次在sql查询中遵循正确的约定,这是STACKOVERFLOW,而不是FACEBOOK。

答案 2 :(得分:-1)

使用 B树索引

检查this