0

照合utf8_general_ciでテーブルを作成しました。

CREATE TABLE `general` (
`one` varchar( 250 ) NOT NULL ,
`two` varchar( 250 ) NOT NULL ,
`time` varchar( 250 ) NOT NULL,); 

1000レコードを入力しました。

insert into general values('ankit','hamitte','13364783'),('john','will','13364783');

これで、レコードを選択して並べ替えるときに数秒かかりますが、armscii_general_c1を使用すると、すぐに読み込まれます。これの主な理由と、どの照合を使用する必要があるか

4

2 に答える 2

1

複数列のインデックスに3つの列すべてがあると思いますか?

もしそうなら、utf8ではそれらは適合しません。MySQLは行をスキャンする必要があります。MySQLインデックスはInnoDBでは767バイト(MyISAMの場合は1000)に制限されており、インデックスは固定幅であるため、UTF8インデックスはシングルバイトでエンコードされたインデックスの3倍のサイズです。

UTF8を使用すると、1つの列のみをインデックスに適合させることができます。

したがって、シングルバイトエンコーディングでは、MySQLはインデックスを完全に利用できますが、マルチバイトエンコーディングでは、MySQLはインデックスを完全に利用できません。

于 2012-05-04T15:55:21.650 に答える
0

UTF8は、UTF8文字を保持するために2倍のスペースを必要とすることに注意してください。1つのUTF8文字は、それを説明する2つの文字として格納されます。その結果、UTF8文字列の比較に2倍の時間がかかります。上記のステートメントは、通常どおりに保存されるため、latin1シンボルとは関係ありません。

完全なcreatetableステートメントを投稿してください。問題はインデックスにあると思いますが。実行 show create table general して、ここに出力を投稿するだけです。

ところで:ソートはDBにとって非常に時間のかかる操作であるため、インデックスを使用して高速化する必要があります。

于 2012-05-04T15:49:11.543 に答える