我有一個緩慢的查詢問題,使一個「簡單」選擇..我不明白是什麼問題...這是一個大桌子..但這是一個簡單的查詢..在大表緩慢的SQL,按時間戳過濾(int12)
的表格:
business: (1.000.000 reg)
id (INDEX PRIMARY INT(11) UNSIGNED)
active (INDEX TINYINT(1))
products: (32.000.000 reg)
id (INDEX PRIMARY INT(11) UNSIGNED)
business_id (INDEX INT(11) UNSIGNED)
offer_start (INDEX INT(12) UNSIGNED) (timestam unix)
offer_end (INDEX INT(12) UNSIGNED) (timestamp unix)
price_offer (VARCHAR(10)) (price with decimals)
active (INDEX TINYINT(1))
business.id,products.id,products.offer_start和products.offer_end被INDEX(分離)
當我做這個:
SELECT SQL_NO_CACHE * FROM products
LEFT JOIN business ON business.id = products.business_id
WHERE
(business.active = '1' AND business.paylimit > 1314029906)
AND
(products.active = '1' AND products.offer_start < 1314029906 AND products.offer_end > 1314029906 AND products.price_offer > 0)
LIMIT 0,10
拿21秒。 問題是這樣的:products.offer_start < 1314029906 AND products.offer_end > 1314029906
需要約20秒才能給我結果
是否可以使這個查詢過濾其他表單來加速?
你能提供的解釋計劃? –
你也很可能得到錯誤的答案。 WHERE(business.active ='1'AND business.paylimit> 1314029906)會將左連接更改爲內連接,因爲它必須符合該條件。 – HLGEM
什麼是offer_start和offer_end的確切索引?他們是兩個單獨的索引嗎?該索引是否包含任何其他列? –