MySQL 8.0で質問です。
訳あって同一テーブルに電話番号のカラムが2つあるテーブル table_a があります。
id | tel1 | tel2 |
---|---|---|
1 | 090aaaaaaaa | 080kkkkkkkk |
2 | 090bbbbbbbb | 080nnnnnnnn |
3 | 090cccccccc | |
4 | 090dddddddd |
- 電話番号はtel1の方が多く入っていて、tel2は空欄が多い
- 行数はおよそ3万行です。
- 特に規則性はありません。
- ユニークではありません。
tel1とtel2にはそれぞれインデックスを割り付けています。
- tel1 > ix_tel1 INDEX ASC
- tel2 > ix_tel2 INDEX ASC
クエリでそれぞれのカラムをSELECTし、EXPLAINしてみると、なぜかtel1の場合はフルスキャン、tel2の場合はインデックススキャンとなってしまいます。
SQLは非常に単純なものです。
SQL
1SELECT id, tel1 FROM table_a WHERE tel1='090aaaaaaaa'
SQL
1SELECT id, tel2 FROM table_a WHERE tel2='080nnnnnnnn'
インデックスの指定ミスなども考え、2回注意深く振り直したのですが、やはり結果は同じです。
量的にはたいしたことがないのでDBがフルスキャンを選択するのもわかるのですが、データがほぼ入っているtel1にフルスキャン、空欄が多いtel2にインデックスを使っている意味がわかりません。
両方ともインデックスを使うようにするにはどうすればよいでしょうか?
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。