查询时间慢SQL / Java

时间:2013-04-15 02:17:32

标签: java mysql sql database join

我正在查询一个包含数千行的大型数据库。这是在5分钟左右的时间,而它应该需要大约5秒钟。

    ResultSet rs = st.executeQuery("SELECT flights.airline, flights.flight_num,"
            + "origin_airport_code, destination_airport_code,"
            + "ticket.date, ticket.bought_date, ticket.price "
            + "FROM flights JOIN flightinfo JOIN ticket");

我应该使用某种特定的连接JOIN语句吗?

2 个答案:

答案 0 :(得分:3)

目前,您的查询所做的是获取表的笛卡尔积,因为您没有指定它们的连接条件或定义表之间的相互关系。

您需要在每个连接语句中添加条件或ON子句,例如

SELECT  flights.airline, 
        flights.flight_num,
        origin_airport_code, 
        destination_airport_code,
        ticket.date, 
        ticket.bought_date, 
        ticket.price 
FROM    flights 
        INNER JOIN flightinfo 
            ON flights.colName = flightinfo.colname  -- << 1
        INNER JOIN ticket
            ON table.ColName = ticket.colName        -- << 2

其中:

1 >> Colname >> how the two tables:flights and flightinfo, are related
2 >> table >> I don't know where the table ticket will be joined, it is 
              either flights or flightinfo.

要进一步了解联接,请访问以下链接:

答案 1 :(得分:0)

你的问题在最后一行

FROM flights JOIN flightinfo JOIN ticket

你应该INNER或LEFT加入他们。

您应该注意的另一件事是,如果每个航班有很多机票,您将获得航班重复。

如果可能没有航班机票,那么如果使用INNER加入,您将无法获得航班。

我猜飞行信息总是存在,而且它是飞行的1:1。

所以最终的解决方案是(基于我的假设):

  • inner join flightinfo
  • 离开加入门票
  • 解析时请记住,每张票都会复制航班

如果门票是您的主要表,并且您不需要没有门票的航班,则执行FROM ticket并将内部加入其他表。