我有一个简单的查询和表,我想知道哪种索引对这种表和查询是有效的。
在我的表中,我有 3 列
CREATE TABLE mYTable(ipFrom BIGINT, ipto BIGINT, url NVARCHAR(255))
Run Code Online (Sandbox Code Playgroud)
我正在运行这个简单的查询。
SELECT url
FROM MyTable
WHERE ipto <= somevalue AND ipfrom >= somevalue
Run Code Online (Sandbox Code Playgroud)
我还在所有 3 列上创建了索引,这些列聚集在 ipFrom 上,其余 2 列上没有聚集。但是这个查询在 CPU 和读取方面给我带来了非常糟糕的性能。
有什么建议。
我实施的是我喜欢根据 IP 地址重定向用户。我存储了来自不同地区和州的多个 IP 范围,并根据用户的 IP 将用户重定向到适当的 URL。
是的,我认为我在两列中以错误的方式插入了数据(稍后会重命名列),但这里的重点是最小化 CPU。
当我查看那里的执行计划时,它会在 where 子句中转换数据,我不知道它为什么要在 where 子句中转换数据。有这样的事情
|--聚簇索引查找(OBJECT:([T].[TC]), SEEK:([T].[C] > Convert([@V])
我的 CTE 为特定客户无限循环运行,我无法找出原因。
这是查询:
;WITH ClassTree
AS (SELECT ID, NAME, Parent_ID
FROM TableName
WHERE ID = 1
UNION ALL
SELECT T.ID, T.NAME, T.Parent_ID
FROM TableName T WITH (NOLOCK)
JOIN ClassTree
ON Parent_ID = ClassTree.ID
)
SELECT * FROM ClassTree
Run Code Online (Sandbox Code Playgroud) 我创建了一个用户并为其授予了许多权限和角色,包括SQLAgentUserRole
和SQLAgentReaderRole
。
我的应用程序检查 SQL Server 代理的状态以查看它是否正在运行,并且每当我尝试使用我创建的用户运行我的应用程序时,它都无法识别正在运行的 SQL Server 代理。
当我使用sysadmin
角色中的用户做同样的事情时,它工作正常。
我们正在使用master..xp_servicecontrol
检查 SQL 代理服务的状态,我已经为用户提供了
GRANT EXECUTE ON SYS.XP_PROP_OLEDB_PROVIDER TO User;
Run Code Online (Sandbox Code Playgroud)
它仍然不起作用。有什么帮助吗?
我应该给用户或角色什么权限,以便它可以在数据库中创建登录或创建用户。
无论如何,我们可以使用备份文件估计/知道数据库的大小而无需恢复它吗?
如果我有一个包含许多索引的表,并且我运行了一个将行插入到表中的语句,SQL Server 是一次插入一个行,还是使用并行性插入行?