Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 是否有任何理由使索引的数量超过字段的数量?(一般是MySQL还是RDBMS)?_Database_Indexing - Fatal编程技术网

Database 是否有任何理由使索引的数量超过字段的数量?(一般是MySQL还是RDBMS)?

Database 是否有任何理由使索引的数量超过字段的数量?(一般是MySQL还是RDBMS)?,database,indexing,Database,Indexing,假设您有一个包含两个字段的表,如名字和姓氏 如果在两个字段上都添加了复合索引,理论上应该可以为第一个字段编制索引。据我所知,在该字段上创建第二个索引是多余的。要确保所有查询都使用索引,只需在姓氏上添加索引即可 因此,表上的索引数似乎不应大于表中的字段数 对不对?如果不是,为什么不呢?考虑一个表T,它有3个索引值列:a、B、C 主要索引可能在T(A,B,C)上 可能存在定义了A和C的查询,因此这些查询的索引是T(A,C) 可能存在定义了B的查询:T(B)是索引 可能存在定义了C的查询:T(C)是索

假设您有一个包含两个字段的表,如名字和姓氏

如果在两个字段上都添加了复合索引,理论上应该可以为第一个字段编制索引。据我所知,在该字段上创建第二个索引是多余的。要确保所有查询都使用索引,只需在姓氏上添加索引即可

因此,表上的索引数似乎不应大于表中的字段数


对不对?如果不是,为什么不呢?

考虑一个表T,它有3个索引值列:a、B、C

  • 主要索引可能在T(A,B,C)上
  • 可能存在定义了A和C的查询,因此这些查询的索引是T(A,C)
  • 可能存在定义了B的查询:T(B)是索引
  • 可能存在定义了C的查询:T(C)是索引
  • 这看起来像是索引多于列


    表中的列越多,就越容易找到可能有用的索引,并且可能会使索引计数高于列计数。

    我明白了,这是有道理的。所以,为了决定是否添加更多的复合索引,我应该查看我的WHERE子句,看看哪些子句使用多个字段。是的,这是一个标准。您还需要平衡用于存储索引的空间以及维护这些索引的成本与使用量。作为次要的副作用,如果有更多的索引要考虑,则需要更长的时间来优化查询,因为有更多的选项要考虑。然而,这很少是真正可以衡量的,更不用说意义重大了。