0

JOIN查询包含大量数据的下表。这对 java jdbc 和 jpa 执行非常慢。

用例 UI 有一个选择交易者列表、类别和日期范围的选项。如果我从下拉列表中选择 1 周日期范围和所有交易者,以下查询是否会将 1 周股票表的记录与来自 stock_trader 的所有记录连接起来?

            STOCK
------------------------------------------
stock_id long   | PRIMARY KEY AUTO_INCREMENT
stock_code  | varchar(10)
stock_name  |varchar(10)
created_date    |DATETIME
category    |varchar(10)

    STOCK_TRADER
-----------------------------------------
stock_id | long
trader_name | FULLTEXT 

SQL查询

  Select * from STOCK st join stock_trader trad
     on st.stock_id=trad.stock_id where st.created_date<CURRENT_TIMESTAMP()
     and trad.trader_name in(:traderlist) 
group by st.stock_id

traderlist:从 UI 中选择的交易者列表

stock_trader如果我使用下面的数据模型添加一个额外的列并加入多个列,请评论性能提升。我可以期待以下查询的更快响应,该查询仅映射来自 stock 表的 1 周记录与来自 stock_trader 的 1 周交易者。

  • 有什么办法可以最小化查询的处理时间?100 万条数据的平均执行时间是多少。
  • 如果下面的连接被替换为视图并在来自 java jdbc/jpa 的视图上应用 where 子句会怎样。我发现 view 使执行速度更快,但担心它会加入整个数据集,因为 where 子句是从 UI 动态应用的。如果是这样,性能会慢得多,对吧?

                  STOCK_TRADER
    -----------------------------------------
    stock_id    |   long
    trader_name     |   FULLTEXT 
    created_date    |   DATETIME
    

    SQL查询

    Select * from STOCK st join stock_trader trad 
        on st.stock_id=trad.stock_id and 
        st.created_date =trad.created_date where st.created_date<CURRENT_TIMESTAMP()
        and trad.trader_name in(:traderlist) 
    group by st.stock_id
    
4

0 回答 0