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 に答える