Ton*_*ola 7 sql sql-server indexing query-optimization
我有一个SQL Server表,具有以下结构:
CREATE TABLE [dbo].[Log](
[LogID] [bigint] IDENTITY(1,1) NOT NULL,
[A] [int] NOT NULL,
[B] [int] NOT NULL,
[C] [int] NOT NULL,
[D] [int] NOT NULL,
[E] [int] NOT NULL,
[Flag1] [bit] NOT NULL,
[Flag2] [bit] NOT NULL,
[Flag3] [bit] NOT NULL,
[Counter] [int] NOT NULL,
[Start] [datetime] NOT NULL,
[End] [datetime] NOT NULL)
Run Code Online (Sandbox Code Playgroud)
该表用于记录活动.列A- E表示外键,Flag1- Flag3表示某些日志状态,列Start和End标记活动的开始和结束.
平均而言,该表每30秒更新一次,更新可以进行约50次插入/更新.
用户可以从UI进行查询,并过滤任何给定列上的数据以及列和列类型的所有组合.
优化此表的数据检索的最佳方法是什么:
A,D,E],[ A, Start, End]等,并为它们创建索引mar*_*c_s 11
我怀疑这里的任何人都可以做出任何猜测 - 您需要记录表的用法并从该用法中查看正在查询的列组合.
- 创建一个包含所有这些列的"主"索引
这绝对不是一个好主意 - 如果你有一个索引(A,B,C,D,E)并且你用B和D的值限制你的查询,那么这个索引就完全没用了.它只是有用的
在任何其他情况下,这都是浪费 - 不要使用它.
- 确定一些最常用的滤波器组合,例如[A,D,E],[A,Start,End]等,并为它们创建索引
是的,这确实是承诺任何成功的唯一方式.您需要查看实际发生的查询类型,然后对其进行调整.