【发布时间】: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 上启用全文。我需要获取包含 name 和 details 字词的所有行。以下查询未返回预期结果:
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