我有一个用户表,其中包含超过50000000个条目。我想检查服务器上是否存在已经注册的用户,然后执行此请求。
SELECT *
FROM
(SELECT TOP (1000) *
FROM UserdatasTemp) AS ut
JOIN Userdatas AS u ON u.Login = ut.Login
AND u.Password = ut.Password
-- ...OTHER JOINS...
我在登录名和密码列上使用了2个唯一索引。同时,我有2个查询计划,其中第一个索引的搜索速度慢,第二个索引的搜索速度快。
索引为IX_Userdatas_Login_Password
的第一个计划:
索引为IX_Userdatas_Password_Login
的第二个计划:
我在第一个索引中使用登录名和密码列的唯一索引,在第二个索引中使用密码和登录名列的唯一索引。在索引中,这些列不在包含选项卡中。
谁能提示为什么会发生这种情况,以及如何更快地执行给定的请求?
我尝试过重建索引、调整页面大小、重置统计信息以及再次重建索引,但问题仍然存在
1条答案
按热度按时间kb5ga3dv1#
非常感谢我的朋友们解决了这个问题。问题本身是varchar(450)和varchar(MAX)列中的数据类型不正确。奇怪的是,我在密码中没有看到这个问题,并试图找到索引忘记不同类型的问题