質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

2回答

305閲覧

同一テーブルのカラムでインデックスを使う場合と使わない場合がある

Take83

総合スコア40

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2020/09/03 02:54

MySQL 8.0で質問です。

訳あって同一テーブルに電話番号のカラムが2つあるテーブル table_a があります。

idtel1tel2
1090aaaaaaaa080kkkkkkkk
2090bbbbbbbb080nnnnnnnn
3090cccccccc
4090dddddddd
  • 電話番号は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にインデックスを使っている意味がわかりません。

両方ともインデックスを使うようにするにはどうすればよいでしょうか?

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

統計情報の更新タイミング
ANALYZE TABLEを実行していますか?

投稿2020/09/03 03:04

Orlofsky

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

原因が判明しました。

MySQL 8.0から導入されたIndex Visibleの設定がおかしくなっておりました。
tel1のvisible=falseになっておりました。

visible=trueにしたところ、正常にインデックスが作動しました。

投稿2020/09/03 03:00

Take83

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問