【发布时间】:2013-06-05 14:46:20
【问题描述】:
由于LONGTEXT 字段,我遇到了问题。一切正常,但是当执行带有任何 WHERE 子句的 SELECT 查询时,mysql 会进入睡眠状态并且永远不会返回。只有 80k 记录和显式 WHERE 比较工作正常。 (有些记录超过 1M,很少是 700K 左右,但其余的只有 60 到 100KB)。
例如:
[HANGs]
SELECT * FROM item_info
WHERE added_on > '2013-02-14 19:40:05' AND added_on < '2013-02-15 19:40:05'
;which is like 2 rows only
[FINE]
SELECT * from item_info
WHERE item_id in (1, 10, 1000)
这是常见的行为吗?
这是架构:
CREATE TABLE `item_info` (
`item_id` bigint(20) NOT NULL AUTO_INCREMENT,
`title_md5` varchar(35) NOT NULL,
`original_document` longtext NOT NULL,
`added_on` datetime NOT NULL,
PRIMARY KEY (`item_id`),
UNIQUE KEY `md5_Unique` (`title_md5`)
) ENGINE=MyISAM AUTO_INCREMENT=87781 DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC;
有什么解决办法吗?还是我必须用外键将长文本字段分隔到一个新表中?
【问题讨论】:
-
这与
longtext没有任何关系,日期比较可能会很昂贵。 -
@DanielA.White 确实,但在这种情况下只有 88k 条记录
-
听起来像是一个锁定问题。你在哪里执行查询?从一种语言还是从 SQL 命令行?我怀疑它与 LONGTEXT 或日期比较有什么关系。
-
从 PHP 和 SQLYog 执行/测试....
-
它不仅仅是“datetime”字段,还有其他简单的int字段,但结果是一样的……只有主键字段在Where查询中起作用……
标签: mysql database performance longtext