0

私のデータベースには現在 200,000 を超えるレコードがあり、3 つの結合を持つこのクエリがあり、これらの結合で行の選択に時間がかかりすぎてクエリが停止するのではないかと心配しています。実行中にいくつかのプリローダーのような非常に多くのレコードを選択するための推奨される方法はありますSELECTか? 私は何に対してもオープンです。

私のクエリ

-- Select all records
SELECT cust.firstname, cust.lastname, cust.phone1, cust.phone2, cust.mobile1, cust.mobile2, cust.regas, cust.regpol,
    cust.province, cust.city, cust.brgy, cust.unit, cust.vill, cust.condo, cust.servtype,
    cust.primary, cust.override_pst, dist.name, order.created, order.branch_id 'selectedbranch', order.status,
    order.delivery_date, order.date_acknowledged, order.date_dispatched, order.date_delivered, order.date_cancelled
    FROM sl_customers cust
    LEFT JOIN sl_orders `order` ON order.customer_id = cust.id
    LEFT JOIN sl_branches branch ON order.branch_id = branch.id
    LEFT JOIN sl_distributors dist ON branch.distributor_id = dist.id
    ORDER BY order.id DESC

そして、はい、使用されるすべての列JOINにインデックスが付けられます。

4

1 に答える 1

0

クエリをバッファリングされていないクエリとして実行することを検討してください。大規模な結果セットは大量のメモリを消費する可能性があり、php では、速度と使いやすさのために結果をメモリにバッファリングするようにデフォルトで設定されている一般的なデータベース拡張機能のほとんどが、メモリの消費と応答の遅延を犠牲にしています。これは、小さいほとんどの結果セットにとって優れたデフォルトです。

http://php.net/manual/en/mysqlinfo.concepts.buffering.php

ただし、現在のメモリ使用量レベルが許容できる場合は、バッファリングされたクエリを使用します。プログラマーの観点から見ると、それらははるかに扱いやすいものです。

于 2013-09-01T15:08:15.127 に答える