0

実行時間はMySQLクエリの行数に正比例すると確信しています。私の質問は、どのくらいの割合ですか?データベースが大きくなるか、少しだけ大きくなると、クエリの実行時間は大幅に増加しますか?

主題に関するどんな情報でも高く評価されます

4

3 に答える 3

3

いいえ、そうではありません。

Aselect * from tableは比例して長くかかります(行が多い場合、4行しかないテーブルの場合、2行のテーブルの2倍の時間はかかりません。これは、「固定費」によって支配されます)

テーブルのサイズに関係なく、 Aselect * from table limit 10には同じ時間がかかります。

Aselect count(*) from tableは、テーブルサイズに関係なく、MySQLでは瞬時に実行されます。

Aselect * from table where primary_key = ?は対数的にスケーリングします(Bツリーインデックスが使用されるため)。

Aselect count(*) from table where non_indexed_column = ?は比例して長くかかりますが、そうでselect count(*) from table where indexed_column = ?はありません。

行数が2倍になると、 Aのselect * from table_a join table_b4倍の時間がかかります。Aselect * from table_a join table_b using (column_a = indexed_column_b)は線形にスケーリングする必要があります。

行数が2倍になると、 Aselect * from table_a order by unindexed_columnは2倍以上の時間がかかります。Aselect * from table_a order by indexed_columnは比例してスケーリングできますが、そうでselect * from table_a where something = ? order by indexed_columnない場合があります。

テーブルがメモリに収まらなくなるとすぐに、すべての操作にかなり長い時間がかかります。または、メモリが他のテーブルに使用されているときにクエリを実行する場合。これは、実行時間が突然屋根を通過することで、実際にヒットする壁になる可能性があります。

また、「クエリ内の行」(選択された行)と「テーブル内の行」についても取り上げていました。これらは両方とも影響があります。テーブル内の削除された行の「存在」も影響を与える可能性があります。

于 2012-09-14T05:58:42.490 に答える
0

SELECTクエリの実行時間の最大の要因は、データベースの完全なスキャンが必要か、インデックスを使用できるかどうかです。前者の場合、データベースが大きくなるにつれて実行時間が長くなります。後者の場合、そうではありません(少なくとも重要ではありません)。

于 2012-09-14T05:58:25.820 に答える
0

実行時間は、行数と列数に比例します。クエリを作成する列から、インデックスキーを列に配置する必要があります。これにより、実行速度が大幅に向上します。

于 2012-09-14T05:58:59.300 に答える