mysql 索引太多?

2021-12-21 00:00:00 indexing sql mysql

我正在花一些时间优化我们当前的数据库.

I am spending some time optimizing our current database.

我正在专门研究索引.

有几个问题:

  • 索引是否过多?
  • 索引会加速什么?
  • 索引会减慢什么?
  • 什么时候添加索引比较好?
  • 什么时候添加索引是个坏主意?
  • 多索引与多列索引的优缺点?

推荐答案

索引会加速什么?

What will indexes speed up?

数据检索 -- SELECT 语句.

Data retrieval -- SELECT statements.

索引会减慢什么?

数据操作 -- INSERT、UPDATE、DELETE 语句.

Data manipulation -- INSERT, UPDATE, DELETE statements.

什么时候添加索引比较好?

When is it a good idea to add an index?

如果您想获得更好的数据检索性能.

If you feel you want to get better data retrieval performance.

什么时候添加索引是个坏主意?

When is it a bad idea to add an index?

在将要进行大量数据操作的表上 -- 插入、更新...

On tables that will see heavy data manipulation -- insertion, updating...

多索引与多列索引的优缺点?

Pro's and Con's of multiple indexes vs multi-column indexes?

在处理覆盖索引(多列上的索引)时,查询需要处理列的顺序,在索引列定义中从左到右.语句中的列顺序无关紧要,只有第 1、2 和 3 列的顺序 - 在使用索引之前,语句需要引用第 1 列.如果只有第 2 列或第 3 列的引用,则无法使用 1/2/3 的覆盖索引.

Queries need to address the order of columns when dealing with a covering index (an index on more than one column), from left to right in index column definition. The column order in the statement doesn't matter, only that of columns 1, 2 and 3 - a statement needs have a reference to column 1 before the index can be used. If there's only a reference to column 2 or 3, the covering index for 1/2/3 could not be used.

在 MySQL 中,查询中的每个 SELECT/语句只能使用一个索引(子查询/等被视为单独的语句).MySQL 允许的每个表的空间量是有限制的.此外,在索引列上运行函数会使索引无用 - IE:

In MySQL, only one index can be used per SELECT/statement in the query (subqueries/etc are seen as a separate statement). And there's a limit to the amount of space per table that MySQL allows. Additionally, running a function on an indexed column renders the index useless - IE:

WHERE DATE(datetime_column) = ...

相关文章