小编Ale*_*xey的帖子

latin1 是否比 utf8 有性能优势?

我有一个utf8包含 > 80M 记录的表,其中一列 ( char(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL) 可以只包含拉丁符号 ( [a-zA-Z0-9])。将此列转换为latin1是否有意义?

MySQL文档说:

要使用 UTF-8 节省空间,请使用 VARCHAR 而不是 CHAR。否则,MySQL 必须为 CHAR CHARACTER SET utf8 列中的每个字符保留三个字节,因为这是最大可能的字符长度。例如,MySQL 必须为 CHAR(10) CHARACTER SET utf8 列保留 30 个字节。

我做了一个测试 - 创建了 2 个具有相同 50M 记录的表:

CREATE TABLE `t_utf8` (
  `c_1` char(6) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  UNIQUE KEY `index_t_utf8_on_c_1` (`c_1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

CREATE TABLE `t_lat` (
  `c_1` char(6) CHARACTER SET …
Run Code Online (Sandbox Code Playgroud)

mysql mysql-5.7

9
推荐指数
1
解决办法
5165
查看次数

MySQL 与 PostgreSQL:对 COUNT(*) 执行速度进行基准测试

我对数据库进行基准测试以找出最适合我的项目的数据库,我发现这count(*)在 PostgeSQL 中非常慢。我不明白这是 PostgeSQL 的正常行为还是我做错了什么。

我有一个包含 ~200M 记录的表。MySQL表定义:

CREATE TABLE t1 (
  id int(11) NOT NULL AUTO_INCREMENT,
  t2_id int(11) NOT NULL,
....  
  PRIMARY KEY (id),
  KEY index_t2 (t2_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

请求(返回~30M):

SELECT COUNT(*) FROM t1 WHERE t2_id = 7;
Run Code Online (Sandbox Code Playgroud)

运行:

25,797ms MySQL (v5.7.11)

1,222,168ms PostgeSQL (v9.5)

解释:

MySQL:

*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: ref
possible_keys: index_t2
          key: index_t2
      key_len: 4
          ref: const
         rows: 59438630
     filtered: 100.00
        Extra: Using …
Run Code Online (Sandbox Code Playgroud)

mysql postgresql count

6
推荐指数
1
解决办法
2578
查看次数

标签 统计

mysql ×2

count ×1

mysql-5.7 ×1

postgresql ×1