c#“SqlDataReader”是否考虑了数据库中存在的NonClustered索引?
例如,我在数据库上创建了索引:
Create nonClustered Index x1 on [MyDB].[dbo].[Customers] (CustomerID)
然后在c#代码中我执行以下操作:
String sqlQry="Select CustomerId from [MyDB].[dbo].[Customers] where CustomerID=123456";
SqlCommand cmdFindCustomer = new SqlCommand(sqlQry, SQLConnectionObj);
SqlDataReader r = cmdFindCustomer.ExecuteReader();
答案 0 :(得分:2)
c#“SqlDataReader”是否考虑了NonClustered索引 存在于数据库中?
不,对象不知道索引。
假设你的问题是,什么时候非聚集索引将在SQL Server的查询计划中使用,它取决于。优化器通常比我们其他人更聪明,但如果你想要,你可以强制使用带有提示的索引。当然,如果您检查查询计划并且未使用它,那就是这样。
要查看您的索引是否正在使用(GUI路由),请单击SQL Server Management Studio中的显示实际执行计划并运行查询。它将位于单独的选项卡上,并且操作以您应该从右到左,从下到上阅读的格式显示。寻找希望索引搜索索引的操作。如果你没有看到它,它就没有被使用。接下来的步骤是什么?
对索引架构进行研究。 MSDN对如何设计和实现好的索引有很好的了解。其他一些需要检查的资源是行业内的优秀顾问,如Paul Randal和Brent Ozar。
答案 1 :(得分:0)
没有。 SQL Server的查询引擎将确定他将用于获取数据的最佳索引是什么。
使用SqlDataReader对象不会影响密钥的使用。