、3つのテキスト条件に合流これが私のクエリです:mysqlクエリを高速化するにはどうすればよいですか? 2〜3,000K記録
SELECT distinct decks.deckid, tmnt.tournamentid, tmnt.tournamentname,
cast(concat(Monthname(tournamentdate),' ',day(tournamentdate),', ',
year(tournamentdate)) as char) as ConfiguredTournamentDate,
tournamentdate, decks.pilot, decks.deckname, decks.record
FROM tournaments tmnt
LEFT JOIN decks on decks.tournamentid = tmnt.tournamentid
LEFT JOIN cardsindeck cid on cid.deckid = decks.deckid
WHERE upper(decks.deckname) like '%JULIAN23%'
OR upper(decks.pilot) like '%JULIAN23%'
OR upper(cid.cardname) like '%JULIAN23%'
ORDER BY tournamentdate desc;
このクエリが可能44Kの、12件の結果を返します。
- トーナメント - 2775の記録
- Deckname - 44400のレコードの
- Cardsindeck - 333万記録私がFULLTEXTインデックスが構築されている
(Iは、以下の説明が含まれます)。このクエリーには3〜6秒かかりますが、私の推測するレコードではそれほど悪くはありませんが、もっと速くするために何ができるかを見たいと思っています。データは1日に1回しか更新されません。その時点でテンポラリテーブルを作成してクエリすることができますか?
私はそれよりも頼りになる方法はありませんが、基本的に私がここで採用できる他の方法があるかどうかを見たいと思っていました。
はEXPLAIN:
1 SIMPLE tmnt ALL 2772 Using temporary; Using filesort
1 SIMPLE decks ref TourneyID_idx TourneyID_idx 5 magic_decks_july.tmnt.TournamentID 12
1 SIMPLE cid ref DeckID_idx DeckID_idx 5 magic_decks_july.decks.DeckID 24 Using where; Distinct
UPDATE
これは0.5秒にクエリを削減しました。より受け入れられるMuuuuuch。今、他の3の問題領域に掘るために... :)
SELECT distinct decks.deckid, tmnt.tournamentid, tmnt.tournamentname,
cast(concat(Monthname(tournamentdate),' ',day(tournamentdate),',
',year(tournamentdate)) as char) as ConfiguredTournamentDate, tournamentdate,
decks.pilot, decks.deckname, decks.record
from tournaments tmnt
inner join decks on decks.tournamentid = tmnt.tournamentid
where decks.deckname like '%CONDESCEND%'
OR decks.pilot like '%CONDESCEND%'
UNION ALL
SELECT distinct decks.deckid, tmnt.tournamentid, tmnt.tournamentname,
cast(concat(Monthname(tournamentdate),' ',day(tournamentdate),',
',year(tournamentdate)) as char) as ConfiguredTournamentDate, tournamentdate,
decks.pilot, decks.deckname, decks.record
from cardsindeck cid
left join decks on cid.deckid = decks.deckid
left join tournaments tmnt on decks.tournamentid = tmnt.tournamentid
where cid.cardname like '%CONDESCEND%'
order by tournamentdate
'' ---これは** **最適化することができません。ですから、適切な全文索引の使用法*に移行する必要があります。 – zerkms