【发布时间】:2009-02-04 14:23:17
【问题描述】:
我有一个较大的(约 150 万条记录)表,其中包含不同长度的文本字符串,我运行查询以查找匹配项:
CREATE TABLE IF NOT EXISTS `shingles` (
`id` bigint(20) NOT NULL auto_increment,
`TS` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`shingle` varchar(255) NOT NULL,
`count` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `shingle` (`shingle`,`TS`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1571668;
我的问题是,当我对这个表进行比较时,我需要不断地从中添加和删除数据,因此维护索引很困难。
我正在寻找最佳实践,以便及时管理插入,同时最大限度地提高选择的吞吐量。这个过程每天 24 小时运行,需要尽可能快。
感谢任何帮助。
更新: 为了澄清,我在“shingle”列上进行一对一的匹配,而不是在其中进行文本搜索。
【问题讨论】:
-
哇。这里没有想法,但很好的问题。
-
谢谢,但这不仅仅是一个很好的问题,这是一个让我大吃一惊的要求!
-
@jqs:你能发布一个你正在做的示例查询吗?你说的索引很难维护是什么意思?我们有一个表,它有超过 1000 万行和 100 多列,有 20 个索引,我们对许多用户进行了大量的插入/更新和搜索。我们的表现相当不错。
标签: mysql performance indexing