【发布时间】:2011-09-22 07:59:46
【问题描述】:
我正在阅读这个问题MySQL - why not index every field? 并决定做一些测试。
有两个等效的表(a 和 b),每个表有 5.000.000 行和 3 列(int、int、varchar),我索引了表 b 上的所有列,只索引了表上的一列(主键)一个。
结果如下:
编辑:更改/未更改行的时间与以下相同。
mysql> update a set c = '1000000' where c = '1000000';
Query OK, 0 rows affected (2.13 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> update b set c = '1000000' where c = '1000000';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
现在,这与我阅读问题答案后的预期完全相反。
不索引表的每一列是否有任何“可基准”的缺点?
编辑:问题是表中的每个元组都有一个唯一值,并且更新单个索引和唯一行足够快以获得 0.00 标记。但是,当我更新指定的 Flimzy 和 Searlea 等行的子集时,更新非索引列比更新索引列更快,就像它应该的那样。
如果您想查看结果:
mysql> update a set b = 98;
Query OK, 5000002 rows affected (10.85 sec)
Rows matched: 5000002 Changed: 5000002 Warnings: 0
mysql> update b set b = 98;
Query OK, 4988890 rows affected (1 min 32.69 sec)
Rows matched: 5000001 Changed: 4988890 Warnings: 0
【问题讨论】: