簡體   English   中英

查詢時間慢SQL / Java

[英]Slow query time SQL/Java

我正在查詢具有數千行的相當大的數據庫。 這大約需要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 JOIN語句嗎?

當前,您的查詢所執行的操作是獲取表的笛卡爾積,因為您尚未指定它們的連接條件或定義表如何相互關聯。

您需要在每個連接語句中添加條件或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.

要進一步獲得有關聯接的知識,請訪問以下鏈接:

您的問題在最后一行

FROM flights JOIN flightinfo JOIN ticket

您應該INNER或LEFT加入他們。

您應該注意的另一件事是,如果每次航班有很多機票,您將獲得重復的航班。

如果可能沒有航班的機票,那么使用INNER join不會獲得航班。

我猜想flightinfo總是存在的,並且航班數是1:1。

所以最終的解決方案是(根據我的假設):

  • 內聯航班信息
  • 左加入票
  • 解析時,請記住,每張機票都會重復飛行

如果票證是您的主要表,並且您不需要沒有票證的航班,則可以執行FROM ticket並進行內部FROM ticket其他表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM