1

我有这个超过 400 万行的评论表:

CREATE TABLE `comments` 
(
     `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
     `gid` int(11) unsigned NOT NULL DEFAULT '0',
     `userid` int(6) unsigned DEFAULT NULL,
     `date` int(11) unsigned DEFAULT NULL,
     `comment` text NOT NULL,
     `status` enum('on','alert') NOT NULL DEFAULT 'on',
     PRIMARY KEY (`id`),
     KEY `gid_2` (`gid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

现在我正在考虑提取文本字段以减少 400 MB 并提高性能。像这样:

CREATE TABLE commentstext 
(
    id int(11) unsigned NOT NULL AUTO_INCREMENT,
    `comment` text NOT NULL,
    PRIMARY KEY (id)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

但我不确定这是否会以这种方式表现更好。我需要通过使用不同的查询(也)来测试这种情况。到目前为止,我的结果差异很大。在 0.001* - 3.321 秒之间。我无法通过在 phpmyadmin 中查询来检查这一点。

有没有更好更简单的方法或工具来比较查询性能?

4

1 回答 1

0

这就是我一直在寻找的:

SELECT BENCHMARK(1000000000, (
SELECT
comments.comment
FROM
comments
WHERE
`gid`=303410
LIMIT 1
));

(结果 34.1612 秒)(结果 32.2737 秒)

SELECT BENCHMARK(1000000000, (
SELECT
commentstext.comment
FROM
commentsindex,
commentstext
WHERE
`gid`=303410
AND commentsindex.`id` = commentstext.`id`
LIMIT 1
));

(结果 34.1237 秒)(结果 34.2914 秒)

SELECT BENCHMARK(1000000000, (
SELECT
commentstext.comment
FROM
commentsindex
INNER JOIN
commentstext
ON commentstext.`id` = commentsindex.`id`
WHERE
`gid`=303410
LIMIT 1
));

(结果 32.8471 秒)(结果 34.7079 秒)

...但现在我真的很想知道使用哪种桌子设计并不重要。使困惑

于 2012-04-20T13:38:31.650 回答