创建索引的目的应该是在硬件容量限制的前提下,保证所有的数据库调用运行的足够快。
只要在所有的SQL语句都能够流畅运行的前提下,索引的数目无上限。
索引行是按照索引键的顺序存储的,所以当索引键中有一列被更新时,DBMS可能不得不把相应的行从旧的索引位置移到新的位置来保持这一顺序。这个新的位置可能与旧的位置位于相同的叶子页上,在这种情况下,只有一个页会收到影响。然而,若果被修改的键是第一列或唯一的列,那么新的索引可能必须被迁移到一个不同的叶子页上。即DBMS必须更新两个叶子页。
多列索引可以使得索引键值唯一,当不稳定的列(更新较多的列)位于尾列时,更新这个不稳定的列绝不会导致其迁移到新的叶子页。
设计索引包含的两个过程,首先找到在最差输入的条件下运行非常慢的查询,然后设计索引以使缓慢的查询变得足够快,并且不导致其它的SQL调用明显变慢。如下图: