数値をINTとして格納していますが、CHARとしてクエリを実行すると(LIKE演算子は暗黙的にINTをCHARに変換します)、それは確かに最適ではありません。数値をINT(おそらくIOパフォーマンスサームの最良のアイデア)として保持したい場合は、数値比較を使用するようにクエリを変更することをお勧めします。
-- instead of CHAR operators
WHERE phone_number LIKE '%4567'
WHERE phone_number LIKE '1234%'
-- use NUMERIC operators
WHERE phone_number % 10000 = 4567
WHERE phone_number >= 12340000 -- considering 8 digit numbers
データを保存およびクエリするための同種の方法を選択することに加えて、適切なインデックスを作成することを覚えておく必要がありますCREATE INDEX IDX0 ON table (phone_number);
。
残念ながら、それでも@ronと同様の効果がコメントされているため、クエリは最適ではない可能性があります。この場合、この列をより管理しやすい列(national_code、area_code、phone_numberなど)に分割するためにテーブルを調整する必要がある場合があります。これにより、たとえば市外局番によるインデックス効率の高いクエリが可能になります。