SQL关系和索引

Phi*_*ent 3 sql t-sql sql-server

我有一个MS SQL服务器应用程序,我已经定义了我的关系和主键.

但是,我是否需要进一步定义关系字段的索引,这些索引有时不在连接中使用,而只是作为where子句的一部分?

我正在假设定义一个关系会创建一个索引,sql引擎可以重用它.

Jam*_*son 6

关于这个主题已经写了一些非常厚的书!

这里有一些拇指: -

不要打扰(除了PK)任何<1000行的表.

否则索引你所有的FK.

检查您的SQL并查找将最大程度地减少结果集的where子句以及对该columun进行索引的索引.

例如.给定:

    SELECT OWNER FROM CARS WHERE COLOUR = 'RED' AND MANUFACTURER = "BMW" AND ECAP = "2.0";

您可能拥有超过20,000辆的5000辆红色汽车,所以索引这个并不会有多大帮助.然而,你可能只有100辆宝马,所以索引MANUFACURER会立即将你的结果设置减少到100,你只需扫描一百行即可消除蓝白车.

通常,dbms将根据基数选择一个或两个可用的索引,因此它可以支付第二次猜测并仅定义可能使用的那些索引.


Joh*_*ret 5

不会在外键约束上自动创建索引。但唯一和主键约束将创建他们的。

为您使用的查询(无论是在联接上还是在 WHERE 子句上)创建索引是正确的方法。