【问题标题】: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 - 全文搜索

      这样做,

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

        选择名称 FROM 艺术家姓名 地点名称 喜欢'$q%'";

      2. 安装 sphinxsearch。

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

        选择名称 FROM 艺术家姓名 WHERE MATCH('$q');

      你会看到执行时间大大减少。

      我已经给出了上面的高级知识。

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

      【讨论】:

        【解决方案3】:

        使用 B-Tree 索引

        检查this

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-01
          • 2010-10-18
          • 1970-01-01
          • 2017-03-31
          • 2017-09-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多