mysql - 索引所有 Vs。索引一些

标签 mysql indexing

我正在读这个问题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/

相关文章:

ruby-on-rails - Rails 迁移 : indexes on a renamed table

grails - 如何从生成的 Controller 中调用默认 Controller 的索引 Action ,或者如何从 Controller 中呈现索引 View ?

MySQL索引获取用于范围的2列之间的记录

javascript - 为什么即使索引已关闭,该索引号似乎仍有效?

MySQL:使用另一个表中的两个计数进行排序?

mysql - 在 postgreSQL 中更改分隔符的简单方法

java - 如何修复 “Incorrect string value for the column at the row 1”错误?

sql - MySQL:在全文搜索中查找多个单词 - 仅完全匹配

MySQL关键字搜索查询与所有关键字匹配的项目?

php - 将两个 $_GET 值与数据库中的行进行比较