我有一个MS SQL服务器应用程序,我已经定义了我的关系和主键.
但是,我是否需要进一步定义关系字段的索引,这些索引有时不在连接中使用,而只是作为where子句的一部分?
我正在假设定义一个关系会创建一个索引,sql引擎可以重用它.
关于这个主题已经写了一些非常厚的书!
这里有一些拇指: -
不要打扰(除了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将根据基数选择一个或两个可用的索引,因此它可以支付第二次猜测并仅定义可能使用的那些索引.