我在这里遇到一个SQL语句的问题,它根据类别从名为News的表中获取数据:
新闻:Id(PK)int,标题字符串,主题字符串,Uid int,Cid int。
SELECT Id, Subject, Uid, Title FROM News WHERE Uid = @Uid
与没有WHERE的语句相比,此语句运行缓慢,因为它应该检查每一行以确保它是否完成条件。
想象一下我的表新闻10000000篇文章。我该怎么办这件事?
答案 0 :(得分:4)
如果Id列是可能已经群集的主键(默认情况下是它们),则只需要在Uid列上创建非聚集索引 - 尤其是Uid列是唯一标识符(GUID)数据类型。
可以通过运行以下SQL来创建:
创建非集群指数IX_News_Uid ON News ( UID )
答案 1 :(得分:1)
您应该为列Uid
创建一个索引,其中包含Id
,Subject
和Title
列。
这样数据库就可以只使用索引来运行查询,而不必触及该表。
答案 2 :(得分:0)
你应该可以在Uid列上创建clustered index。这应该可以提高性能。注意:每个表只能有一个聚簇索引列。
答案 3 :(得分:0)
我会在Uid上创建一个唯一索引。