2009-08-16 7 views
3

Iが3回連続でMyISAMテーブル上の次のクエリ実行:)チケットテーブルのみCREATED_TIME列がUNIX_TIMESTAMP(に設定されているインサートを受信MySQLのCOUNT()関数は見積もり関数ですか?

mysql> SELECT COUNT(*) FROM tickets WHERE created_time BETWEEN UNIX_TIMESTAMP() - 86400 * 20 AND UNIX_TIMESTAMP() - 86400 * 19; 

を、行が削除されていない、とのCREATED_TIMEありません行は更新されません。それにもかかわらず、私が得た結果は、154324,154326、および154325(その順)でした。これにより、COUNT()関数が正確な数値を返さないと私は思っていますが、MySQLのドキュメントやその他のWebから簡単に検索しても、このことは言及されませんでした。誰もCOUNT()が何をしているかを知っていますか?

+0

もう誰が関連性がなくなったと投票したのですか?定義によれば、答えられたすべての質問は、より関連性がありません。私は誰かが彼らをすべて閉じようとしていないと確信しています! – Eric

答えて

5

取得した結果に何が問題がありますか?

クエリを実行すると時間ウィンドウが移動します。最初に2つの新しい結果がウィンドウに表示され、古い結果の1つが出てきます(古すぎます)。

COUNTは、シナリオごとに異なって実装されています。 WHEREを使用してクエリを制限せず、クエリが単一のテーブルで実行される場合、格納された内部カウンタを使用して結果を生成します。問合せを制限すると、結果は最初に表のデータまたは索引を使用してフィルタ処理され、結果の行がカウントされます。

+5

ああ、私はばかです。 –

+5

私はこれが真のプログラミングの知恵への道のりの第一歩だと信じています... =) –

-1

MyIsamはカウントのためにインデックスを使用するので(テーブルスキャンを行うinnodbとは対照的に)、インデックスにいくつかの問題がある可能性があります。

あなたはどのバージョンのmysqlを使用していますか?

3

行数を数えます。まったく。実行するたびにUNIX_TIMESTAMPが異なるため、whereという節が異なります。

これはまったく予想される動作です。

関連する問題