1

sqlite3 データベースで QSQlQuery を使用しています。特定のアイテムを取得するために、4 つの異なるテーブルから結果を入力していました。テーブルを結合すると、パフォーマンス/速度が向上し、結果が速くなると思いました。最初は2つのテーブルを結合したのですが、結合後のデータ取得に時間がかかる(?)

パフォーマンスを改善する方法についての提案は本当にありがたいです。また、http://qt-project.org/doc/qt-4.8/qsqlquery.htmlを見ていましたが、 setForwardOnly を使用すると一部のデータベースでパフォーマンスが向上することが言及されています。それが SQLite3 で機能するかどうか、何か考えはありますか?

ありがとう!

4

1 に答える 1

0

このリンクによると、

http://sqlite.org/cvstrac/wiki?p=PerformanceTuning

SQLite は、USING 句を追加の WHERE 句用語に変換することで、JOIN USING を実装します。NATURAL JOIN および JOIN ON でも同様です。したがって、これらの構造は人間の読者には役立つかもしれませんが、SQLite のクエリ オプティマイザには実際には何の違いもありません。

- 2 つのテーブルを結合するのが間違っていて、フェッチが高速であると期待していました。SQLite データベースでは動作しません。代わりに、"where" 句を使用して 2 つの結果を直接結合すると、パフォーマンスに確実にプラスの影響があります。

(例 :

select * from A,B where A.id = B.id where A.id = 1; それ以外の

select * from A left outer join B on A.id = B.id where A.id = 1)

SQLite は、コンパイル前に最初のステートメントを 2 番目のステートメントに変換します。2 番目のステートメントを直接使用することで、わずかな CPU 時間を節約できます。

于 2012-04-18T20:36:47.330 に答える