0
次のクエリがあります。クエリの説明に「レコードごとに範囲がチェックされています(インデックスマップ:0x8)」と表示されます。私は、これはクエリがよう低速である理由の一つであると仮定しています、どのように私はこれを改善することができますクエリーの範囲チェックを削除する方法
クエリは、現在従うように見える、
explain select
*
from
(select
CASE WHEN dd.parentId IS NOT NULL
THEN CONCAT(dd.`profileId`,dd.`orgId`,dd.parentId)
ELSE CONCAT(dd.`profileId`,dd.`orgId`,dd.id) END as ticketId,dd.*
from
t_dtls_prod dd where dd.currentlyActive = true and dd.dataSource ='SAND' AND msgCreatedOn BETWEEN '2016-09-01 00:00:00'
AND '2016-10-03 00:00:00' and dd.profileId = 148 group by ticketId) as d
left join basket_prod b on b.basketId=d.toBasketId
left join lead_social_accts_prod a on a.orgId=1002
AND (
(
(
(a.`type`='TWITTER' and d.channel in (1,34)) or (a.`type`='FACEBOOK' and d.channel in (6,7))
or (a.`type`='GOOGLEPLUS' and d.channel in (5,25)) or (a.`type`='LINKEDIN' and d.channel =30)
or (a.`type`='GOOGLEPLUS' and d.channel=36) or ((a.`type`='YOUTUBE' or a.`type`='GOOGLEPLUS') and d.channel=27)
or (a.`type`='TUMBLR' and d.channel in (29,31)) or
(a.`type`='INSTAGRAM' and d.channel=35)
)
AND
d.userChannelId=a.socialId) OR
(a.`type`='BLOG' and d.channel in (9,11,15,21) AND d.msgId=a.socialId))
left join lead_prod l on l.leadId=a.leadId and l.orgId=1002 where d.profileId = 148 limit 0,1000
結果が1000行件まで下降時に出てくるように見えますそれを超えて、それはただ死ぬ。ここ
よう
t_dtls_prod
またはbasket_prod
への接続を忘れてしまったAND((((a.'type' = 'TWITTER' と(6,7)のd.channel)または(a.'type' = 'GOOGLEPLUS'とd.channel in(5)のd.channel) 、25))または(a.'type' = 'LINKEDIN'およびd.channel = 30)または(a.'type' = 'GOOGLEPLUS'およびd.channel = 36)または((a.'type' = YOUTUBE 'またはa.'type' =' GOOGLEPLUS ')とd.channel = 27)AND d.userChannelId = a.socialId)OR(a.'type '= 'BLOG'とd.channel in(9,11,15,21)AND d.msgId = a.socialId))..これは接続 –okです。ビットスピードアップ、条件の順序は重要です –
あなたが 'OR'との結合条件を持っていれば、それとはあまり関係がありません –