如何删除使用临时?

时间:2016-08-17 20:36:28

标签: mysql temporary

请帮帮我,删除"使用临时"。 我尝试了很多不同的选择,不可能摆脱它。或排序消失或"使用临时"出现。 ;(

分类表:

 `product_category_multi` (
      `m_Id` mediumint(7) NOT NULL,
      `prod_Id` smallint(6) unsigned NOT NULL,
      `multi_cat` mediumint(7) unsigned NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

索引表:

ALTER TABLE `product_category_multi`
  ADD PRIMARY KEY (`m_Id`),
  ADD KEY `multi_cat` (`multi_cat`),
  ADD KEY `Id` (`prod_Id`);

示例内容表:

m_Id    prod_Id     multi_cat
-------+-----------+---------+  
1       1           5
2       1           1
3       1           6
4       2           5
5       2           1
6       3           5
7       4           5
8       4           6

产品表:

`shop_product` (
  `Id` int(10) unsigned NOT NULL,
  `product_article` varchar(20) NOT NULL,
  `product_article_main` varchar(20) NOT NULL,
  `product_category` int(10) unsigned NOT NULL DEFAULT '0',
  `product_name` varchar(255) NOT NULL,
  `product_price` int(10) unsigned NOT NULL DEFAULT '0',
  `product_active` smallint(1) unsigned NOT NULL DEFAULT '0',
  `product_warehouse_temp` enum('0','1') NOT NULL,
  `product_published_start` int(14) unsigned NOT NULL DEFAULT '0',
  `product_top` enum('0','1') NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0;

索引表:

ALTER TABLE `shop_product`
  ADD PRIMARY KEY (`Id`),
  ADD KEY `product_name` (`product_name`),
  ADD KEY `product_price` (`product_price`),
  ADD KEY `product_article_main` (`product_article_main`);

示例内容表:

Id  product_article     product_article_main    product_category    product_name    product_price   product_active  product_warehouse_temp  product_top         
--+-------------------+------------------------+------------------+---------------+----------------+--------------+------------------------+------------+
1   qwe                 qwe                     5                   name1           20              1               1                       0
2   asd                 qwe                     5                   name2           30              1               1                       0
3   zxc                 qwe                     5                   name3           50              1               0                       1
4   wer                 sdf                     6                   name4           10              1               1                       0
5   sdf                 sdf                     6                   name5           20              1               1                       0
6   xcv                 sdf                     6                   name6           50              1               1                       0
7   ert                 cvb                     1                   name7           10              1               0                       1
8   cvb                 cvb                     1                   name8           20              1               1                       0

请求:

SELECT
    A.*
FROM
(
    SELECT prod.Id
    FROM shop_product prod
    INNER JOIN (
            SELECT prod_Id
            FROM product_category_multi
            WHERE multi_cat = '5'
        ) AS cat ON cat.prod_Id = prod.Id

    WHERE 
        prod.product_active = '1' 
        AND prod.product_published_start <= 1471376797
        AND prod.product_price = (
            select MIN(temp.product_price)
            from shop_product temp 
            where prod.product_article_main=temp.product_article_main 
        )   
    ORDER BY prod.product_warehouse_temp DESC, prod.product_top DESC, prod.product_review DESC, prod.Id ASC
    LIMIT 0, 20
) B 
INNER JOIN shop_product A USING (Id)

显示0到19行(总共20行,查询耗时0.0899秒。)

说明:

id  select_type     table                   type        possible_keys           key                     key_len     ref                             rows    Extra
--+---------------+------------------------+-----------+----------------------+-----------------------+-----------+-------------------------------+--------+-------------
1   PRIMARY         <derived2>              ALL         NULL                    NULL                    NULL        NULL                            20      
1   PRIMARY         A                       eq_ref      PRIMARY                 PRIMARY                 4           B.Id                            1           
2   DERIVED         product_category_multi  ref         multi_cat,Id            multi_cat               3           const                           6869    Using temporary; Using filesort
2   DERIVED         prod                    eq_ref      PRIMARY                 PRIMARY                 4           product_category_multi.prod_Id  1       Using index condition; Using where
4   DEP. SUBQUERY   temp                    ref         product_article_main    product_article_main    62          prod.product_article_main       3

这是这个变种,但它不起作用&#34; ORDER BY&#34;条款

        SELECT B.*
            FROM(
                SELECT prod_Id
                FROM product_category_multi
                WHERE multi_cat = '5'
            ) cat

            INNER JOIN (
                SELECT 
                    prod.Id
                FROM shop_product prod
                WHERE 
                    prod.product_price = (
                        select MIN(temp.product_price)
                        from shop_product temp 
                        where prod.product_article_main=temp.product_article_main 
                    )
                    AND prod.product_active = '1' 
                    AND prod.product_published_start <= '1471268208'
                ORDER BY 
                    prod.product_warehouse_temp DESC, prod.product_top DESC
            ) prod ON cat.prod_Id = prod.id


        INNER JOIN shop_product B USING (Id)

显示0到24行(总计2296,查询耗时0.0046秒。)

更新18.08

在这里,作为变体,我们得到了这个请求,但我认为它太大而且不舒服并且想要加快速度。 或者我是否想要太多这些请求?

SELECT C.*
FROM
(
            (SELECT  prod.Id,prod.product_warehouse_temp,prod.product_top,prod.product_article_main  FROM shop_product prod WHERE 1=0)
    UNION
            (SELECT 
                p.Id,p.product_warehouse_temp,p.product_top,p.product_article_main
            FROM shop_product p,
                    (
                        SELECT prod_Id
                        FROM product_category_multi
                        WHERE multi_cat = '5'
                    ) cat
            WHERE
                p.Id = cat.prod_Id
                AND p.product_price = (
                    select  MIN(temp.product_price)
                    from shop_product temp 
                    where temp.product_article_main=p.product_article_main
                )
                AND p.product_active = '1' 
                AND p.product_published_start <= '1471268208'
            )


    ORDER BY product_warehouse_temp DESC, product_top DESC
    LIMIT 0,20
) A
INNER JOIN shop_product C USING (Id)

显示0到19行(总计20行,查询耗时0.1175秒。)

说明:

id      select_type     table                   type        possible_keys           key                     key_len     ref                             rows    Extra
------+---------------+------------------------+-----------+----------------------+-----------------------+-----------+-------------------------------+--------+-------------
1       PRIMARY         <derived2>              ALL         NULL                    NULL                    NULL        NULL                            6869        
1       PRIMARY         C                       eq_ref      PRIMARY                 PRIMARY                 4           A.Id                            1           
2       DERIVED         NULL>                   NULL        NULL                    NULL                    NULL        NULL                            NULL    Impossible WHERE    
3       UNION           product_category_multi  ref         multi_cat,Id            multi_cat               3           const                           6869    
3       UNION           p                       eq_ref      PRIMARY                 PRIMARY                 4           product_category_multi.prod_Id  1       Using index condition; Using where
5       DEP. SUBQUERY   temp                    ref         product_article_main    product_article_main    62          prod.product_article_main       3
NULL    UNION RESULT    <union2,3>              ALL         NULL                    NULL                    NULL        NULL                            NULL    Using filesort

0 个答案:

没有答案
相关问题