首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询优化建议产品

SQL查询优化建议产品
EN

Stack Overflow用户
提问于 2012-11-25 14:40:37
回答 1查看 276关注 0票数 2

我现在将尝试更好地解释以下问题和疑问的目的。假设我们讨论的是电子商务环境和数据库。除其他外,我们还有三个表:产品、订单和orders_data。ORDERS表将处理所有已下单的订单,我们称之为ORDERS_DATA的子表将存储订单中记录的所有产品。

按照表格的定义,对于我的问题,没有那些无用的字段:

代码语言:javascript
复制
    ORDERS (*id*, date, totale, ...);
    ORDERS_DATA (id_order, id_product, ...);
    PRODUCTS (id, name, ...);

ORDERS中的主键是id,而在ORDERS_DATA中则是(id_order,id_product)

对于一个查询,我想要做的是根据产品ID (同时浏览产品页或购物车页面),检索基于ORDERS_DATA表的建议产品。查询将返回位于这些订单中的所有id_product,其中至少有一个是给定的产品ID

为了语义起见,我将报告一个例子。让我们假设我们在ORDERS_DATA中有这些行:

代码语言:javascript
复制
R1(1, 1); R2(1, 2); R3(1, 3); R4(2, 2), R5(2, 5); R6(3, 3);

我想要有关产品id = 2的建议。我的查询将返回id :1和3(来自R1和R3 -他们共享相同的订单id,此订单还有产品2 -从R2 -顺便说一下它的产品)和产品5,因为订单编号2。订单编号3将被忽略。

这是我写的查询,但我确信这不是性能和风格上最好的查询。

代码语言:javascript
复制
SELECT 
    A.id_product, COUNT( A.id_product ) AS num
FROM  
    orders_data A, orders_data B
WHERE 
    A.id_order = B.id_order
    AND B.id_product IN  (*IDs-HERE*)
    AND A.id_product NOT IN (*IDs-HERE*)
GROUP BY A.id_product

我已经使用了内部联接语法,但是性能没有任何变化。查询耗时0,0022秒,在in clausole中只有一个产品id。使用多个产品id (例如,在购物车页面中,篮子中有更多的产品),性能将大大降低。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-26 15:02:04

尝试用一个JOIN测试替换EXISTS

代码语言:javascript
复制
SELECT
   id_product,
   COUNT(1) As num
FROM
   orders_data As A
WHERE
   id_product NOT IN (*IDs HERE*)
And
   Exists
   (
      SELECT 1
      FROM orders_data As B
      WHERE B.id_order = A.id_order
      And B.id_product IN (*IDs HERE*)
   )
GROUP BY
   id_product
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13552044

复制
相关文章

相似问题

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