日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

STRAIGHT_JOIN

STRAIGHT_JOIN與JOIN類似,區別僅在于STRAIGHT_JOIN不會調整執行計劃中的左右表順序。可用于聯接優化器以次優順序處理表的情況。

版本要求

僅3.1.3.0及以上版本的集群支持STRAIGHT_JOIN。

說明 如何查看集群內核版本,請參見如何查看實例版本信息。如需升級內核版本,請聯系技術支持。

語法結構

join_table:
    table_reference STRAIGHT_JOIN table_factor [join_condition]

table_reference:
    table_factor
  | join_table

table_factor:
    tbl_name [alias]
  | table_subquery alias
  | ( table_references )

join_condition:
    ON expression 
說明
  • STRAIGHT_JOIN執行結果與INNER JOIN執行結果相同。

  • a STRAIGHT_JOIN b語法執行時a表會做連接的左表,b表會做連接的右表,且a和b直接連接,優化器不會再做表連接順序的優化。

使用場景

  • 適用于指定INNER JOIN執行時的左右表,且表大小明確,或AnalyticDB MySQL執行計劃選擇的INNER JOIN左右表不合理時的業務場景。

  • 在默認Hash JOIN場景下,選擇大表在左,小表在右時,會達到較好性能。如果指定NESTED LOOP JOIN,則應選擇小表在左,大表在右。

如下第一句SQL,如果已知最佳連接順序為region、nation、customer,則可以將第一句SQL改寫為第二句SQL,指定連接順序及左右表,提高查詢效率。

SELECT count(*)
       FROM    customer, nation, region
       WHERE c_nationkey = n_nationkey
       AND n_regionkey = r_regionkey
       AND r_name = 'ASIA'; 
SELECT count(*)
       FROM    region STRAIGHT_JOIN nation on n_regionkey = r_regionkey
       STRAIGHT_JOIN customer ON c_nationkey = n_nationkey
       WHERE r_name = 'ASIA';

示例

本示例中,STRAIGHT_JOIN會生成與INNER JOIN語法相同的結果。STRAIGHT_JOIN不會被優化器自動調整JOIN順序,region表為左表。INNER JOIN時,優化器會判斷哪種順序執行效率最高,而自動調整JOIN順序。

SELECT count(*)
       FROM region STRAIGHT_JOIN nation on n_regionkey = r_regionkey
       INNER JOIN customer ON c_nationkey = n_nationkey
       WHERE r_name = 'ASIA';