SQL 关系和索引

标签 sql sql-server tsql

我有一个 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/

相关文章:

MySQL:为按日期分组的最大值选择相应的行

mysql - 尝试使用两个连接来查找sql​​中不常见的数据

c# - 如何: C# string to SQL full-text catalog search?

sql-server - 在 SQL Server 中计算加权平均值

mysql - 什么样的连接(如果有的话)在这里是合适的?

sql - postgresql 中的年龄限制

sql - Oracle 相当于 SQL 函数 'convert'

SQL Server 日期时间转换给出不正确的结果?

sql - 在 SQL 中排序包含整数的字符串

sql - 在 SQL Server 2008 中计算以分钟为单位的时差