【问题标题】:MySQL Table PerformanceMySQL 表性能
【发布时间】:2011-12-01 10:35:58
【问题描述】:

我在 MySQL 中有一个超过 5000 万行的表。下面是表结构:

CREATE TABLE `links` (                                          
      `id` bigint(20) NOT NULL AUTO_INCREMENT,                      
      `loc` text NOT NULL,                                          
      `lastmod` datetime NOT NULL,                                  
      `changefreq` varchar(15) NOT NULL,                            
      `priority` float NOT NULL,                                    
      `isdownloaded` tinyint(1) NOT NULL,                           
      `mainrepoid` bigint(20) NOT NULL,                             
      PRIMARY KEY (`id`),                                           
      FULLTEXT KEY `locfulltext` (`loc`)                            
    ) ENGINE=MyISAM AUTO_INCREMENT=11426345 DEFAULT CHARSET=latin1

在字段 loc 上启用全文。我需要获取包含 namedetails 字词的所有行。以下查询未返回预期结果:

SELECT *
FROM links
WHERE 
MATCH (
   loc
)
AGAINST (
   'name +details' IN BOOLEAN MODE
)

所以我不得不使用以下查询:

SELECT id, loc
FROM links
WHERE 
loc like '%name%' and
loc like '%details%'

还有更好的选择吗?

【问题讨论】:

    标签: mysql performance database-design


    【解决方案1】:

    不知道你用的是哪个版本的mySql。但是您提供的以下查询在我的服务器上运行良好。

    SELECT *
    FROM links
    WHERE 
    MATCH (
       loc
    )
    AGAINST (
       'name +details' IN BOOLEAN MODE
    )
    

    如果您在此查询中遇到问题,请尝试在 name 之前添加一个加号(+)。就像:

    SELECT *
    FROM links
    WHERE 
    MATCH (
       loc
    )
    AGAINST (
       '+name +details' IN BOOLEAN MODE
    )
    

    欲了解更多信息,请参阅以下链接:

    http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-10
      • 2011-09-12
      • 2017-04-30
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2013-07-23
      相关资源
      最近更新 更多