我正在读这个问题MySQL - why not index every field?并决定做一些测试。
有两个等效的表(a 和 b),每个表都有 5.000.000 行和 3 列(int、int、varchar),我对表 b 上的所有列建立了索引,而只对表上的一列(主键)建立了索引a.
结果如下:
编辑:时间与以下更改/未更改行的时间相同。
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
最佳答案
当然,为每列建立索引也有缺点。索引越多,写入(INSERT、UPDATE 和 DELETE)所需的时间就越长,因为要写入数据库的内容就越多。
索引只能加快读取速度。意思是,选择、删除...WHERE 和更新...WHERE。
关于mysql - 索引所有 Vs。索引一些,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473329/