mySqlクエリの1つに問題があります。どのローカルマシンでも問題を再現することはできません。簡単なクエリがあります
SELECT ID
FROM TABLE_NAME
WHERE ID IN (15920,15921)
GROUP BY ID
結果を返します–
ID 15920
データベースに両方のIDのデータがあるため、これは予期しない結果です。
Explainコマンドを使用すると、このクエリに対して次の結果が返されました
+ ---- + ------------- + ------------ + ------- + --------- ----------- + -------------------- + --------- + ----- +- ----- + --------------------------------------- + | id | select_type | テーブル| タイプ| possible_keys | キー| key_len | 参照| 行| エクストラ| + ---- + ------------- + ------------ + ------- + --------- ----------- + -------------------- + --------- + ----- +- ----- + --------------------------------------- + | 1 | シンプル| TABLE_NAME | 範囲| CUST_SID_SRUN_INDX | CUST_SID_SRUN_INDX | 4 | | 1 | whereを使用する; group-byのインデックスの使用| + ---- + ------------- + ------------ + ------- + --------- ----------- + -------------------- + --------- + ----- +- ----- + --------------------------------------- +
この問題について、私は次の解決策を試しました-
•派生テーブルの強制–
SELECT ID
FROM (SELECT ID
FROM TABLE_NAME
WHERE ID IN (15920,15921)) CUST
GROUP BY ID
•where句の代わりにhave句を使用する
SELECT ID
FROM TABLE_NAME
GROUP BY ID
HAVING ID IN (15920,15921)
•この表で使用されているインデックスを無視する–
SELECT ID
FROM TABLE_NAME IGNORE INDEX (CUST_SID_SRUN_INDX)
WHERE ID IN (15920,15921)
GROUP BY ID
上記のすべてのクエリは、次のように期待される結果を返します:-
ID 15920 15921
インデックスが使用されている場合のgroupby句の予期しない動作を分析しようとしています。他に試すことができるかどうか教えてください。参考までに…問題が発生するUATボックスは、Mysql5.1.30を搭載したLinuxマシンです。私たちが見る違いは、Mysqlのバージョンです。マシンでMysql5.1.52を使用しています。この問題があるテーブルは、MyISAMデータベースエンジンを使用しています。
他に入力が必要な場合はお知らせください。