计数与左连接查询执行很长时间不同

时间:2016-05-19 13:47:49

标签: mysql

我在所有这些表中都有大约140k的原始数据:

SELECT COUNT( DISTINCT p.product_id ) AS total
FROM bh_product p
LEFT JOIN bh_product_description pd ON ( p.product_id = pd.product_id ) 
LEFT JOIN bh_product_to_store p2s ON ( p.product_id = p2s.product_id )

执行此查询大约需要3秒钟,这是正常的吗? 所有表都在product_id字段上有索引 可以以某种方式改善吗?

已更新: 原始查询:

SELECT COUNT( DISTINCT p.product_id ) AS total
FROM bh_product p
LEFT JOIN bh_product_description pd ON ( p.product_id = pd.product_id ) 
LEFT JOIN bh_product_to_store p2s ON ( p.product_id = p2s.product_id ) 
WHERE pd.language_id =  '2'
AND p.status =  '1'
AND p.date_available <= NOW( ) 
AND p2s.store_id =  '0'
AND (
pd.name LIKE  '%душевые%'
OR pd.tag LIKE  '%душевые%'
OR LCASE( p.model ) =  'душевые'
OR LCASE( p.sku ) =  'душевые'
OR LCASE( p.upc ) =  'душевые'
OR LCASE( p.ean ) =  'душевые'
OR LCASE( p.jan ) =  'душевые'
OR LCASE( p.isbn ) =  'душевые'
OR LCASE( p.mpn ) =  'душевые'
)

UPDATED :它发现服务器正在运行其他密集进程,这会减慢sql处理速度。 关闭其他过程后,性能变得可以接受。

3 个答案:

答案 0 :(得分:2)

如果您使用的是left join,则结果与

相同
select count(distinct p.product_id) as total 
from bh_product p

因为left join可能无法过滤product_id

答案 1 :(得分:0)

您可以从此查询开始:

SELECT COUNT( 
  DISTINCT p.product_id ) AS total
FROM bh_product p
INNER JOIN bh_product_description pd 
ON p.product_id = pd.product_id
  AND pd.language_id = 2
INNER JOIN bh_product_to_store p2s 
ON p.product_id = p2s.product_id 
  AND p2s.store_id = 0
WHERE p.status =  '1'
AND p.date_available <= NOW( ) 
AND (
pd.name LIKE  '%душевые%'
OR pd.tag LIKE  '%душевые%'
OR 'душевые' IN ( p.model , p.sku , p.upc , p.ean , p.jan , p.isbn , p.mpn ))

但你最关键的是你的WHERE条款。你正试图到处搜寻。那不是很聪明。我非常确定p.ean是条形码,并且不能等于душевые p.isbn相同。所以你应该改变你的查询,只做你真正需要做的事情。但不要过滤所有东西,希望“抓住鱼”。

更新检查此查询(应该比第一个快得多):

SELECT COUNT( 
  DISTINCT p.product_id ) AS total
FROM bh_product p
INNER JOIN bh_product_description pd 
ON p.product_id = pd.product_id
  AND pd.language_id = 2
INNER JOIN bh_product_to_store p2s 
ON p.product_id = p2s.product_id 
  AND p2s.store_id = 0

答案 2 :(得分:-1)

我认为您正在尝试执行此类查询

python3