2

Mysql での検索について質問または誤解があるかもしれません。


私のテーブルには、1 つ目ID(int 8) と 2 つ目used(int 1) の 2 つのフィールドがあります。

フィールドはusedブール値のように 0 または 1 を取得します。

行数を20001とすると、

about ID: 私の最後の ID は 20001 で、最初の ID は 1 です。

about used: ID = 1 を持つ最初の行だけが 1 で、他の行は 0 です。

1 行を取得したい場合は、このコードを記述します。OK です。

 SELECT * 
 FROM  `table` 
 WHERE  `used` =0
 LIMIT 0 , 1

の金額が0の行が欲しいだけですused。しかし、私の問題は次のとおりです。Mysqlは20000行すべてを検索するので、1行を与えてください。金額が0の行が1つだけ必要なため、これは私を傷つけますused 。最善の方法は何ですか?

4

2 に答える 2

2

これにより、最初の一致が返され、最初の一致が見つかった時点で検索が停止します。

1.

SELECT TOP 1 *
FROM `table`
WHERE `used`=0
 OR NOT (EXISTS (SELECT NULL FROM `table` WHERE `used`=0))
ORDER BY ASCENDING;

2.

SELECT *
FROM `table`
WHERE `used`=0
 OR NOT (EXISTS (SELECT NULL FROM `table` WHERE `used`=0))
ORDER BY ASCENDING LIMIT 1;

どちらも同じことを行い、テストを実行して、どちらがより速く実行されるかを確認します。

于 2012-08-25T10:20:32.000 に答える
1
SELECT * FROM table_name WHERE used = "0";

使用された値が0であるすべての行が、次のように表示されます。

SELECT * FROM table_name WHERE used = "0" LIMIT 1;

使用された値が0である1つの行が表示されます。

これがあなたが探しているものではない場合、あなたはあなたの質問を明確にすることができますか?

最後のレコードが必要な場合

SELECT * FROM table_name WHERE used = "0" ORDER BY id DESC LIMIT 1;

編集:

クエリの速度が心配な場合は、コマンドライン(または好みのツール)を使用してmysqlを起動し、その量のレコードのみを含むテーブルにクエリを実行すると、どのくらいの時間がかかるかを示す文が表示されると思います。まったく何もない場合は(0.00秒)と表示される場合があります。:)

テーブルがより複雑になる場合は、特定の列にmysqlインデックスを使用する方法を学ぶことを検討してください:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

MySQLの予約語について:

テーブルの名前が私の注意を引いたので、テーブル名以外のものを使用することを検討tableする必要があります。これにより、テーブルワードを使用するときに引用符を使用する必要がなくなります。used(予約語でもない単語の周りでも使用しています。

MySQL(5.5)内で使用するために避けるべき予約語のリスト:http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

于 2012-08-25T10:11:33.160 に答える