3

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データベースエンジンを使用しています。

他に入力が必要な場合はお知らせください。

4

2 に答える 2

1

助けてくれてありがとう。

MySql 5.1.30 には MyISAM パーティションに関する問題があります。数日間頭を悩ませた後、MySQL を 5.1.52 バージョンにアップグレードするか、パーティションを再編成することで問題を解決しました。

ご参考までに、MySQL フォーラムで報告された次のバグを参照してください。

http://bugs.mysql.com/bug.php?id=44821

于 2013-03-26T06:16:29.580 に答える
0

インデックスを使用してクエリの結果が間違っている場合は、何らかの理由でテーブルが破損している可能性があります。試す:

REPAIR TABLE table_name;

または、データのバックアップを試み、テー​​ブルを破棄して再作成し、バックアップからテーブルにデータを再入力します (これにより、インデックスも再作成されます)。

MySQLリファレンス マニュアルを参照してください - テーブルの再構築

于 2013-03-15T19:22:20.103 に答える