我有一个 MS SQL 服务器应用程序,我在其中定义了我的关系和主键。
但是,我是否需要进一步定义关系字段的索引,这些索引有时不在连接中使用,而是作为 where 子句的一部分?
我正在假设定义关系会创建一个索引,sql 引擎可以重用该索引。
最佳答案
关于这个主题已经写了一些非常厚的书!
以下是一些经验法则:-
不要打扰索引(除了 PK)任何小于 1000 行的表。
否则索引你所有的 FK。
检查您的 SQL 并查找最能减少您的结果集和索引该列的 where 子句。
例如。给出:
从颜色 = '红色' 且制造商 = "BMW"且 ECAP = "2.0"的汽车中选择所有者;
在 20,000 辆红色汽车中,您可能有 5000 辆红色汽车,因此将其编入索引不会有太大帮助。
但是,您可能只有 100 辆 BMW,因此索引 MANUFACURER 会立即将您的结果集减少到 100,您只需扫描一百行即可消除蓝色和白色的汽车。
通常,dbms 会根据基数选择一个或两个可用的索引,因此需要再次猜测并仅定义可能使用的那些索引。
关于SQL 关系和索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/330946/