首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Create index通过inner提高查询速度

Create index通过inner提高查询速度
EN

Stack Overflow用户
提问于 2017-06-09 03:28:50
回答 2查看 954关注 0票数 0

我使用MS,有两个表: Products (ProdID,其他一些字段)和ProdCat (ID,ProdID,CategoryID),它确定哪个产品属于哪个类别。

我让select喜欢

代码语言:javascript
复制
SELECT TOP (8) ProdID, Description, Image
FROM  Products INNER JOIN ProdCat ON ProdCat.ProdID = Products.ProdID
WHERE  Products.Active=1 AND ProdCat.CategoryID = 123 Order by ProdCat.sorting, Products.ProdID

Products表有50.000多条记录,ProdCat表有150.000多条记录,查询速度慢。

你能告诉我如何创建索引来加速这个查询吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-06-09 03:38:11

这是您的查询:

代码语言:javascript
复制
SELECT TOP (8) ProdID, Description, Image
FROM Products p INNER JOIN
     ProdCat pc
     ON pc.ProdID = p.ProdID
WHERE  p.Active = 1 AND pc.CategoryID = 123
Order by pc.sorting, p.ProdID;

这有点挑战性,因为有两种方法可以优化查询。首先尝试ProdCat(CategoryId, ProdId)Products(ProdId, Active)

不幸的是,这两种方法都不会消除排序。但这可能会提高性能。

票数 0
EN

Stack Overflow用户

发布于 2017-06-09 04:17:23

ProdCat (ID,ProdID,CategoryID)

为什么会有ID列?这似乎没有什么帮助。

在这样的多对多链接表中,您需要能够有效地获取单个ProdID的所有CategoryID,并获取单个Category的所有ProdID。

你的问题就是一个很好的例子。如果Products.Active的基数较低,则查询可能从那里开始,查找每个活动产品的类别,或者从Category=123开始,然后查找所有产品。

那么这个表应该在(ProdID,CategoryID)上有一个聚集PK,在(CategoryID)上有一个非聚集索引(反之亦然)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44444084

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档