2

以下は、さまざまなテーブルから情報を取得するための私のクエリです。

私はmysqlデータベースを使用しています。

 $sql="select c.cid,c.id,c.compid, c.firstname,c.lastname,c.phone,c.home_phone,c.payment,c.status,c.pstatus, c.pstatus2, c.reservation, u.triptype,u.flight_type_arr, u.flight_type_dep, c.email,c.sugg_pickup_date_time,c.sugg_airport_pickup_time,u.triptype,u.traveltype,            
            dr_arr.driver_name as driver_name_arr, dr_arr.driver_email as driver_email_arr, 
            dr_dep.driver_name as driver_name_dep, dr_dep.driver_email as driver_email_dep,
            ar.rid,ar.finalprice1, ar.finalprice2, ap.p1, ap.p2, ap.p3, ap.transaction_id
            from customer c
            left join vehicle_fees vf1 on (vf1.vehicle_id=c.vehicle_id1)
            left join vehicle_fees vf2 on (vf2.vehicle_id=c.vehicle_id2)
            left join userinfo u on (u.id=c.id)
            left join holiday_fees hf1 on (hf1.holidayfee_Date=u.date)
            left join holiday_fees hf2 on (hf2.holidayfee_Date=u.date1)
            left join airport_reservation ar on (ar.cid = c.cid)
            left join driver dr_arr on (dr_arr.did = ar.did_arr)
            left join driver dr_dep on (dr_dep.did = ar.did_dep)
            left join airport_payment ap on (ap.cid = c.cid)
            where (c.reservation = 'booked' or c.reservation = 'cancelled') ORDER BY c.cid DESC" .$var_limit;

しかし、実行にはもっと時間がかかります。

誰かが私のクエリが間違っているか正しいかを提案できますか?

4

2 に答える 2

1

あなたのように - プライマリ テーブル (顧客) が他のすべての「オプション」テーブルに結合されている場合、MySQL があなたのために考え、IT がプライマリ テーブルと見なすものを内部的に再構築しようとすることが時々わかりました。既知の特別なキーワードを使用すると、役立つ場合があります..

from: 
    SELECT (rest of query)
to:
    SELECT STRAIGHT_JOIN (rest of query)

さて、where句とorder byです。(reservation, cid) にインデックスがあることを確認してください

于 2012-12-23T17:43:00.747 に答える
0

クエリは正当に見えますが、私が見ている問題は、制限がないことです。通常、取得する行数を制限するには、クエリスクリプトの最後にLIMITステートメントを配置する必要があります。レコードはいくつあるのだろうか。

于 2012-12-23T14:34:16.547 に答える