【问题标题】:MySQL : Optimize performance of search on varchar column [duplicate]MySQL:优化 varchar 列的搜索性能 [重复]
【发布时间】:2014-03-01 04:26:24
【问题描述】:

我有一个客户表,其中包含列名称,即 varchar(255)。在应用程序中,我们有按名称搜索的功能。我们在这个表中有大约 800 万条记录。查询非常明显。

SELECT customer_table_columns FROM customer_table WHERE customer_name 
LIKE '%user input customer name%';

现在这个查询运行速度相当慢(最多需要几分钟),它会惹恼用户。我想知道是否有办法提高此查询的性能。

此列上有索引,但未定义索引类型。索引类型的选项有 FULLTEXT、PRIMARY 和 UNIQUE。

【问题讨论】:

  • 你能发布表格的架构吗?为列使用索引在查询速度上应该会好得多,但其他事情,比如将数据规范化到单独的表和使用外键可以帮助排序时间等。
  • MySQL 和 'LIKE %' 和 'millions of records' 不能很好地协同工作。您确实在进行全表扫描,并且没有神奇的解决方案。检查答案@stackoverflow.com/a/11419105/1306385

标签: mysql performance


【解决方案1】:

您的查询运行缓慢,因为您在搜索字符串的开头有一个通配符(即%)。

对于这样的查询,MySQL 需要进行全表扫描。而且您对此无能为力。

另一种方法是使用全文索引来存储名称。这将允许快速搜索名称和单词前缀中的单词。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多