【巨杉數據庫Sequoiadb】如何在作完子查詢後,將子查詢結果做爲條件下壓到 SequoiaDB

【問題詳細描述】
有如下 sql 語句。SQL1 耗時約 4s,SQL二、SQL3 耗時約 1 個小時。有辦法經過優化 SQL2 作到作完子查詢再把全部條件一塊兒下壓到 SequoiaDB 嗎? html

表:ibs.pb_log, 數據量:600億 ,索引:log_cstno + log_datetime
表:ibs.pb_cstinf_pro,數據量:4千萬, 索引:cip_ctfno sql

SQL1:
SELECT * FROM ibs.pb_log WHERE log_cstno IN
('2339139')
AND log_datetime BETWEEN CONCAT('20190101', '000000') AND CONCAT('20190429', '000000')
SQL2:
SELECT * FROM ibs.pb_log WHERE log_cstno IN
(SELECT cip_cstno FROM ibs.pb_cstinf_pro WHERE cip_ctfno IN ('360426198807174073'))
AND log_datetime BETWEEN CONCAT('20190101', '000000') AND CONCAT('20190429', '000000') oop

SQL3:
SELECT * FROM ibs.pb_log LEFT JOIN ibs.pb_cstinf_pro ON
log_cstno=cip_cstno WHERE
log_datetime BETWEEN CONCAT('20190101', '000000') AND CONCAT('20190429', '000000') AND
cip_ctfno IN ('360426198807174073') 優化

查詢計劃見附件。htm

【解決辦法】blog

  1. 因爲 SparkSQL 自身限制,沒法經過 SQL 優化作到。需考慮拆分爲兩個單獨的查詢來完成。
  2. 該場景適合使用 NLJOIN(Nested Loop Join),但 SparkSQL 只有 HSJOIN(Hash Join)和 MSJOIN(Sort Merge Join)。所以沒法將子查詢結果做爲條件下壓。

【參考資料】
表的三種Join方法 (NLJOIN, HSJOIN, MSJOIN): https://www.cnblogs.com/sophy...索引

【解決辦法】ip

  1. 因爲 SparkSQL 自身限制,沒法經過 SQL 優化作到。該場景適合使用 NLJOIN(Nested Loop Join),但 SparkSQL 只有 HSJOIN(Hash Join)和 MSJOIN(Sort Merge Join)。所以沒法將子查詢結果做爲條件下壓。
  2. 建議分兩次查詢完成,先從 ibs.pb_cstinf_pro 表中查詢,而後在應用層用查詢結果生成 ibs.pb_log 表的匹配條件,再對 ibs.pb_log 表進行查詢。

【參考資料】
表的三種Join方法 (NLJOIN, HSJOIN, MSJOIN): https://www.cnblogs.com/sophy...ci

相關文章
相關標籤/搜索