いつもお世話になります。
外部結合でのMySQLのインデックスについてご質問させてください。
以下のようなテーブル構成で、テーブル:T_COMPANYのCON_NO が存在しないテーブル:T_COMPANY_2のレコードを抽出したいと思っています。
既存のT_COMPANYテーブルが6000件で、今回新規で追加したのがT_COMPANY_2で、こちらが11万件ほどあります。
left joinを使用して取得しようとしたのですが、Explainの結果で、T_COMPANYの方がtypeがALL、keyがNULLになってしまいました。
※T_COMPANY_2では、type がindex 、keyがCON_NO と想定した結果です。
クエリ、もしくはテーブル構成・インデックスの設定のおかしいところについてご指摘いただけますでしょうか。
MYSQLのバージョンは5.7です。
テーブル構成
mysql5.7
1CREATE TABLE `T_COMPANY` ( 2 `COMPANYID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 3 `AT_ID` varchar(6) NOT NULL DEFAULT '', 4 `CON_NO` varchar(6) NOT NULL DEFAULT '', 5 `COMPANY_NAME` varchar(250) NOT NULL DEFAULT '', 6 `PRS_NAME` varchar(250) DEFAULT NULL, 7 `COMPANY_ZIP` varchar(12) DEFAULT NULL, 8 `COMPANY_SGBCD` varchar(5) DEFAULT NULL, 9 `COMPANY_ADDRESS` varchar(250) DEFAULT NULL, 10 PRIMARY KEY (`COMPANYID`), 11 UNIQUE KEY `AT_ID` (`AT_ID`), 12 KEY `idx_t_mpco` (`MPCOID`,`AT_ID`), 13 KEY `index_name` (`CON_NO`) 14) ENGINE=InnoDB AUTO_INCREMENT=6550 DEFAULT CHARSET=utf8mb4 15 16CREATE TABLE `T_COMPANY_2` ( 17 `COMPANY2ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 18 `CON_NO` varchar(6) COLLATE utf8mb4_bin NOT NULL DEFAULT '', 19 `CORP_INDI` varchar(1) COLLATE utf8mb4_bin NOT NULL DEFAULT '', 20 `COMPANY_NUMBER` varchar(13) COLLATE utf8mb4_bin DEFAULT NULL, 21 `COMPANY_NAME` varchar(200) COLLATE utf8mb4_bin NOT NULL DEFAULT '', 22 `PRS_NAME` varchar(200) COLLATE utf8mb4_bin NOT NULL DEFAULT '', 23 `COMPANY_ADDRESS_ALL` varchar(200) COLLATE utf8mb4_bin NOT NULL DEFAULT '', 24 PRIMARY KEY (`COMPANY2ID`), 25 UNIQUE KEY `CON_NO` (`CON_NO`), 26) ENGINE=InnoDB AUTO_INCREMENT=110964 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
クエリ
mysql5.7
1select T_COMPANY_2.CON_NO from T_COMPANY_2 left join T_COMPANY on T_COMPANY.CON_NO = T_COMPANY_2.CON_NO where T_COMPANY.CON_NO is null;
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/26 06:00