UTF8_general_ci整理需要几秒钟才能完成

时间:2012-05-04 15:33:52

标签: mysql collation

我在colof ut_8_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时,它会立即加载。这主要原因是什么以及我应该使用哪种排序

2 个答案:

答案 0 :(得分:1)

我猜你在多列索引中有三列?

如果是这样,那么使用utf8,它们将无法适应。 MySQL必须扫描行。 InnoDB中的MySQL索引限制为767字节(MyISAM为1000),索引为固定宽度,因此UTF8索引的大小是单字节编码索引的三倍。

您只能使用UTF8将一列填入索引。

因此,使用单字节编码,MySQL可以完全利用索引,而使用多字节编码,MySQL无法充分利用索引。

答案 1 :(得分:0)

请记住,UTF8需要2倍的空间来容纳UTF8字符。 1 UTF8 char将存储为描述它的2个字符。 因此,比较UTF8字符串需要两倍的时间。 上述声明与latin1符号无关,因为它们将照常存储。

请发布完整的create table语句。我可能认为问题出在索引中。 赶紧跑 show create table general 并在此处输出。

BTW:排序对于DB来说是非常耗时的操作,所以你必须使用索引才能使它快速。