请帮帮我,删除"使用临时"。 我尝试了很多不同的选择,不可能摆脱它。或排序消失或"使用临时"出现。 ;(
分类表:
`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