0

概括:

我们有一个产品页面和用户评论,每个产品可能存在也可能不存在。一张表保存产品详细信息(products_master),一张表确定将显示哪个产品(shoppingfeed)。当我们从查询 #1 循环和输出每个产品时,执行查询 #2 以提取与从查询 #1 显示的当前产品相关的评论。

问题:这一切都有效,但速度很慢!我们正在考虑是否有一种方法可以将其组合成一个优化的查询,我们可以执行一次,然后循环遍历它......或任何其他想法来加快速度。

查询 #1

 SELECT shoppingfeed.action_date,
       products_master.name,
       products_master.image_url,
       products_master.pop_sku,
       products_master.group_id,
       products_master.lowest_price,
       products_master.highest_price,
       products_master.merchant,
       products_master.width,
       products_master.height
FROM   products_master,
       shoppingfeed
WHERE  ( shoppingfeed.sf_product_id = products_master.pop_sku )
ORDER  BY action_date DESC
LIMIT  #offset#, #maxrow#  

查询 #2

 SELECT DISTINCT comment,
                comment_id,
                comments.user_id,
                comment_date_time,
                comment_visibility,
                comments.friend_user_id,
                thread_id,
                alias,
                first_name,
                last_name,
                action_id,
                group_id,
                users.fb_resource_id,
                gender,
                acct_type,
                ascore
FROM   comments,
       users,
       products_master,
       user_relationship
WHERE  comments.sf_product_id = #feed_item.pop_sku#
       AND comments.user_id = users.user_id
       AND products_master.pop_sku = #feed_item.pop_sku#
       AND ( ( comments.user_id = user_relationship.sf_id
               AND user_relationship.user_id = #SESSION.user_id#
               AND user_relationship.relationship_status = 3 )
              OR ( comments.user_id = #session.user_id#
                   AND user_relationship.user_id = #SESSION.user_id#
                   AND user_relationship.relationship_status = 99 ) )
ORDER  BY comment_date_time ASC  

这是我放在一起的视图

选择products_masterpop_sku作为 pop_skuproducts_mastergroup_id作为 group_idproducts_mastername作为 nameproducts_masterimage_url作为 image_urlproducts_masterlast_updated作为 last_updatedproducts_masterhave_it_users作为 have_it_usersproducts_masterwant_it_users作为 want_it_usersproducts_masteradults_only作为 adults_onlyproducts_masterreviewed_by作为 reviewed_byproducts_masterdonate_needed_qty作为 donate_needed_qtyproducts_masterinspired_users作为 inspired_usersproducts_masterdeal_users_up作为 deal_users_upproducts_masterdeal_users_down作为 deal_users_downproducts_mastermerchant作为 merchantproducts_mastermerchant_logo作为 merchant_logoproducts_masterwidth作为 widthproducts_masterheight作为 heightproducts_masteradded_by作为 added_by, products_master. product_category_id作为 product_category_idcommentscomment作为 commentcommentscomment_date_time作为 comment_date_timecommentscomment_visibility作为 comment_visibilitycommentsfriend_user_id作为 friend_user_idcommentsuser_id作为 user_idcommentsaction_id作为 action_idcommentscomment_id作为 comment_idshoppingfeedaction_code作为 action_codeshoppingfeedaction_date作为 action_dateshoppingfeednew_friend_id作为 new_friend_idshoppingfeedquestion_id作为 question_idusersfirst_name作为first_nameuserslast_name 作为last_nameusersshopping_clout作为 shopping_cloutusersgender作为genderusersfb_resource_id 作为fb_resource_idcommentsthread_id, thread_id_users. wish_qty作为wish_qtymerchantslogo作为 logomerchantscompanyname作为 companynameproduct_relationshipdesirabilityAS desirability from ((((( products_masterjoin shoppingfeed on(( products_master. pop_sku= shoppingfeed. sf_product_id))) join commentson(( products_master. pop_sku= comments. sf_product_id))) join userson((( comments. user_id= users. user_id) and ( comments. user_id= shoppingfeed. user_id)))) join product_relationship on(( product_relationship. user_id= users. user_id))) join merchantson((( products_master. merchant= merchants. merchantid) and ( product_relationship. sf_product_id = products_master. pop_sku)))) 按comments.comment_date_time

4

2 回答 2

1
  1. 尝试使用 'inner join' 或 'left/right join' 而不是 'where' 子句中的条件
  2. 检查您的主键和外键,如果它们在连接表中引用更多,则将其添加到您的表列中
  3. 如果它们在连接表中引用更多,则为您的表列创建索引(实际上,外键是索引之一)
于 2013-09-05T05:46:46.053 回答
0

我添加了一些索引,并做了一个视图,现在事情正在煮熟。我将尝试更多的索引以使其更快,但我现在是一个快乐的露营者。

于 2013-09-07T18:04:18.203 回答