如何在很多条件下优化sql查询

时间:2013-07-10 05:25:53

标签: sql sql-server query-optimization

table station_tbl:

station_name   |  fare_adult |  fare_child |  fare_OKU |  type |    stationid

New City            2.00         1.00         1.00       0            19900
Old Village         2.00         1.00         1.00       0            54900
Old City            5.00         2.50         2.50       1            23100
New Castle          1.00         0.50         0.50       1            22900
Adult                                                    2              0
Child                                                    2              1
OKU                                                      2              2
Single                                                   3              0
Return                                                   3              1

我的查询:显示票证信息

SELECT
    A.ticketid,
    B.station_name AS stationid,
    c.station_name AS destination,
    CONVERT(VARCHAR(5), GETDATE(), 108) AS TIME,
    CONVERT(VARCHAR(12), GETDATE(), 103) AS Date,
    D.station_name AS ticket_type,
    e.station_name AS journey_type,
    amount,
    issuedby
FROM ticketcollections AS A, 
    station_tbl AS B, 
    station_tbl AS c, 
    station_tbl AS D, 
    station_tbl AS e
WHERE A.ticketidparent = '" + Request("ParentId") + "'
    AND A.stationid = B.stationid
    AND B.type = 0
    AND A.destination = c.stationid
    AND c.type = 0
    AND A.ticket_type = D.stationid
    AND D.type = 4
    AND A.journey_type = e.stationid
    AND e.type = 3

我已将所有数据合并到一个表格中。

此表仅用于存储电台名称和票证类型的名称。

因为在表ticketcollections中只存储code (1, 2, 3, 4)。因此,当我想要打印票证时,我会参考此station_tbl来显示命名目的。

如果此查询会使查询太慢,请帮助我。

在我的电脑上它很快但在用户的电脑上它很慢。

我只提到了两张桌子。

2 个答案:

答案 0 :(得分:0)

试试这个:

SELECT
    A.ticketid,
    B.station_name AS stationid,
    B.station_name AS destination,
    CONVERT(VARCHAR(5), GETDATE(), 108) AS TIME,
    CONVERT(VARCHAR(12), GETDATE(), 103) AS Date,
    B.station_name AS ticket_type,
    B.station_name AS journey_type,
    amount,
    issuedby
FROM ticketcollections A
    station_tbl AS B,
WHERE A.ticketidparent = '" + Request("ParentId") + "'
    AND A.stationid = B.stationid
    AND B.type in(0,4,3)

答案 1 :(得分:0)

你在桌子上有指数吗?我建议至少在stationId上为ticketcollections和station_tbl以及在station_tbl类型中添加它们。