内部联接在具有大数据的两个表上的性能

时间:2017-04-29 13:40:12

标签: mysql performance join inner-join query-tuning

JOIN查询下表,其中包含大量数据。使用java jdbc和jpa执行速度非常慢。

用例 用户界面可以选择交易者列表,类别和日期范围。如果我从下拉列表中选择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

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

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

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

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

    SQL QUERY

    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
    

0 个答案:

没有答案