据我所知,在MySQL列上添加索引可以通过创建一个全新的表来加快在where子句中使用该列的请求速度,因此select变得更快,但insert/modify变得更慢,因为现在有两个表需要插入数据,但在我的示例中,这甚至不相关。那么,我假设该表中的任何新数据的检索速度也会更快,对吗?
lp0sw83n1#
UPDATE和DELETE也有WHERE子句。如果要将更改应用于特定行,如果可以使用索引找到该行,而不是强制UPDATE或DELETE扫描整个表,则可以提高性能。索引与所有行保持同步。* 因此,如果您为表定义了索引,任何后续的INSERT/UPDATE/DELETE都会更改索引中的条目。因此,新行也会从性能改进中受益。
rbpvctlc2#
它不会创建第二个表。索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读遍整个表以查找相关行。表越大,这花费越多。如果表中有问题列的索引,MySQL可以快速确定数据文件中间的查找位置,而不必查看所有数据,这比顺序阅读每一行要快得多。大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)都存储在B树中。空间数据类型的索引使用R树; MEMORY表还支持散列索引; InnoDB对FULLTEXT索引使用倒排列表。
2条答案
按热度按时间lp0sw83n1#
UPDATE和DELETE也有WHERE子句。如果要将更改应用于特定行,如果可以使用索引找到该行,而不是强制UPDATE或DELETE扫描整个表,则可以提高性能。
索引与所有行保持同步。* 因此,如果您为表定义了索引,任何后续的INSERT/UPDATE/DELETE都会更改索引中的条目。因此,新行也会从性能改进中受益。
rbpvctlc2#
它不会创建第二个表。
索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读遍整个表以查找相关行。表越大,这花费越多。如果表中有问题列的索引,MySQL可以快速确定数据文件中间的查找位置,而不必查看所有数据,这比顺序阅读每一行要快得多。
大多数MySQL索引(PRIMARY KEY、UNIQUE、INDEX和FULLTEXT)都存储在B树中。空间数据类型的索引使用R树; MEMORY表还支持散列索引; InnoDB对FULLTEXT索引使用倒排列表。