2

私はmySQLを初めて使用します。私は本のテーブルを持っていて、ユーザーが本を検索して特定の本を見つけられるようにしたいと思っています。

書籍の表の列:
======================
出版社
の作家

価格
出版日
など

このテーブルをクエリして、パフォーマンスの良い特定の本を見つけるにはどうすればよいですか?私が今していることは:

SELECT name,writer,publisher,price 
FROM books
WHERE publisher='publisher' 
AND writer='wirter' 
AND name='name' 
AND price<='price' 
AND publishingdate>='publishingdate' 
etc.

しかし、ANDが多すぎるため、サーバーが停止すると思います。テーブルを検索するためのより良い方法はありますか?ありがとう

4

3 に答える 3

4

パフォーマンスを向上させるには、テーブルにインデックスを追加する必要があります。

さまざまな列でユーザー指定の検索を幅広くサポートする場合は、各列に個別にインデックスを付けることができます。

これらのインデックスを追加した後でも、実行速度が遅い特定のクエリが見つかった場合は、MySQLがそのクエリのパフォーマンスを向上させるために使用できる複数列のインデックスを追加することをお勧めします。を使用EXPLAINして、特定のクエリが使用するインデックスを確認できます。

また、インデックスを追加すると読み取りのパフォーマンスが向上する可能性がありますが、テーブルへの書き込みのパフォーマンスも低下することにも注意してください。書き込み速度も重要な場合は、未使用のインデックスを多く追加しないように注意する必要があります。

関連している

于 2012-07-08T12:49:11.570 に答える
2

あなたが必要とする条件のためにこのような複数を持っていても完全に大丈夫です。ダース未満は過剰だとは思いません。andパフォーマンスの問題がない30秒のクエリを見てきました。

「サーバーを強制終了する」ことはまったくありません。ただし、これはクエリを試して、実行時間の長さを確認してから、インデックスや他のテーブルなどを使用してクエリを改善する良い機会です。

レコード数が多いためにパフォーマンスが問題になる場合は、さまざまなフィールドにインデックスを追加できます。10,000未満のレコードがある場合、私は気にしません。

于 2012-07-08T12:50:17.927 に答える
2

これは問題ありません、それは何も殺しません。時期尚早に最適化しないようにしてください。それが最初に機能することを確認してください。

かなりの数のの行があり、実際にパフォーマンスの問題が発生したら、スキーマを再検討します。ほとんどの場合、ルックアップを高速化するために必要なインデックスはいくつかあります。クエリなどのツールは、EXPLAINクエリの実行時にデータベースが実行していることを診断するのに役立ちます。

つまり、心配する必要はありません。

于 2012-07-08T12:50:56.550 に答える