mysql:9358
From: "KATAYOSE hakuo" <"KATAYOSE hakuo" <katayose@xxxxxxxxxx>>
Date: Fri, 14 May 2004 01:32:42 +0900
Subject: [mysql 09358] Re: distinct でデータ欠落
片寄です。 > > 次のような select 文を書くと distinct の有無で question_no の答え 1 が欠 > > 落してしまいます。何か間違えているでしょうか? > > > > mysql> select question_no from answer order by create_date desc limit 10; > > distinctでどのレコードが選ばれているかが問題な気がします。 > limit 10を外すとどうですか。もしくはorder by question_noで試してみるとか。 > create_date をselectしてみるとか。etc. マニュアルの「5.2.9 MySQL による LIMIT の最適化」を見ると ------------------------------------MySQL日本語マニュアル抜粋start 5.2.9 MySQL による LIMIT の最適化 HAVING を使用するのではなく LIMIT row_count を使用している場合、MySQL に よるクエリの処理方法が異なる場合があります。 ・LIMIT を使用して数レコードしか選択していないと、フルテーブルスキャンが 行われそうな場合に、MySQL はインデックスを使うことがある。 ・ORDER BY とともに LIMIT row_count を使用している場合、MySQL ではすべて のテーブルがソートされるのではなく、最初の row_count レコードの検索が 行われた時点でただちにソートを終了する。 ・LIMIT row_count を DISTINCT とあわせて使用した場合、MySQL は一意の row_count 行のレコードを検索するとただちに停止する。 ------------------------------------MySQL日本語マニュアル抜粋end 「ORDER BY」と「LIMIT」を同時に使うと、全てのデータをソートしないと 書かれています。 また「LIMIT」と「DISTINCT」を使用した場合も全てのデータを検索しないと記載さ れ ています。 DISTINCTと「LIMIT」、あるいは「ORDER BY」と「LIMIT」を共に使う場合は MySQLは勝手に最適化してしまうようです。
9354 2004-05-13 23:53 [Koichi Shimamura <ma] distinct でデータ欠落 9355 2004-05-14 00:11 ┗[seiji takegata <take] -> 9358 2004-05-14 01:32 ┣["KATAYOSE hakuo" <ka] 9359 2004-05-14 02:22 ┃┗[seiji takegata <take] 9360 2004-05-14 02:50 ┗[seiji takegata <take] 9364 2004-05-14 09:54 ┗[Koichi Shimamura <MA] Re: distinct でデータ 9365 2004-05-14 10:43 ┗[Koichi Shimamura <MA] Re: distinct でデータ欠落 9366 2004-05-14 10:57 ┣[seiji takegata <take] 9368 2004-05-14 11:29 ┗["HIROSE, Masaaki" <h] 9371 2004-05-14 20:20 ┗[Koichi Shimamura <ma]