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

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

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

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

因此,使用单字节编码,MySQL 可以充分利用索引,而使用多字节编码,MySQL 不能充分利用索引。

于 2012-05-04T15:55:21.650 回答
0

请记住,UTF8 需要 2 倍以上的空间来保存 UTF8 字符。1 个 UTF8 字符将存储为 2 个描述它的字符。因此,比较 UTF8 字符串需要多花两倍的时间。上面的语句与 latin1 符号无关,因为它们将照常存储。

请发布完整的创建表语句。我可能认为问题出在索引中。只需运行 show create table general 并在此处发布输出。

BTW:排序对于数据库来说是非常耗时的操作,所以你必须使用索引来使其快速。

于 2012-05-04T15:49:11.543 回答