これはあなたのクエリです:
SELECT shareit, id
FROM shares
WHERE from = '".$nick."' and
shareit REGEXP 'youtube|dailymotion|vimeo'
ORDER BY id DESC;
正規表現はLIKE
から異なる規則に従ってください。だから、あなたのクエリは同等です:
SELECT shareit, id
FROM shares
WHERE `from` = '".$nick."' and
(shareit LIKE '%yourtube%' OR
shareit LIKE '%dailymotion%' OR
shareit LIKE '%vimeo%'
)
ORDER BY id DESC;
LIKE
パターンの先頭にワイルドカードを使用すると、インデックスは、比較のその部分のために使用することができないことを意味します。クエリでは、shares(from)
のインデックスを使用できます。
どちらが高速ですか、like
またはregexp
ですか?すべての正直なところ、クエリの作業のほとんどは行をフェッチしています。おそらく比較は匹敵します。 1つはもう一方よりも少し速いかもしれませんが、それはわずかな問題です。
あなたは完全一致が必要な場合は、クエリは次のようになります。
SELECT shareit, id
FROM shares
WHERE from = '".$nick."' and
shareit IN ('youtube', 'dailymotion', 'vimeo')
ORDER BY id DESC;
このクエリの場合、shares(from, shareit)
のインデックスは間違いREGEXP
バージョンよりも優れています。
FULLTEXTインデックスを使用すると、LIKEを使用してクエリを高速化できますか? –
@DaveThomas。 。 。テキスト内で「単語」を探している場合のみ。単語は適切な区切り文字で区切られなければならない。 'from'のインデックスでは、フルテキストインデックスが本当に役立つだろうとはっきりしていません。 –
申し訳ありません。私はshareitのフルテキストインデックスを意味していました。もし理論的にshareitがテキストの段落だったら。それは完全なテキストではないことから、それと別のインデックスがありますか?そのように2つの別々のインデックスが使用されているかどうかは不明です。 –