暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

GoldenDB的SQL性能优化——JOIN

Whill 2024-12-30
557

JOIN的优化

描述

小表驱动大表是利用小表结果集,减少大表的捞取数据量,只有同时具有大表和小表时,才有可能走小表驱动大表优化。因此需要判断语句中是否同时存在大表和小表,并区分各个表是大表还是小表用于后续判定。

语法

  • 大小表的判断标准:

小表和大表的区分不是根据表的原始数据来判断的,而是根据条件过滤后的数据来判断。

  • 已知大表、小表分别是哪个时,对于简单的两表 JOIN 语句,可以使用 hint 进行优化,提高查询效率。该 hint 为:/*+ leading(small_table_name) use_nl(big_table_name) */

示例

  SELECT /*+ leading(tb1) use_nl(tb2) */ tb1.colour, tb2.location FROM
    tb1 LEFT JOIN tb2 ON tb1.id=tb2.id AND tb1.location=tb2.location;
  • 该 hint 支持两表做简单的 INNER JOINCROSS JOIN、逗号 JOINLEFT JOINRIGHT JOIN 或者 (+) 构成外联结的场景。
  • 该功能对应有 CN 配置项 small_table_rows_num,用于配置小表数据量的上限值。配置项位于 proxy.ini 文件 [GENERAL] 段中,默认值为 0,表示不开启该优化。自动判断大小表需要用到表总行数,需要提前执行语句 ANALYZE HISTOGRAM; 用于获取当前时刻所有表的总行数;如果想使用表结果集的行数,则需要提前在关注的字段上额外建立直方图。

注意事项

  • 获取的表行数是近似值,并不与表中实际数据量完全一致。
  • 支持 SELECTINSERT SELECT 语句,不支持其他类型的语句。
  • 支持 FROM 子查询,不支持其他类型的子查询。
  • 不支持语句中有跨层关联字段。
  • 如果语句采用了其他优化手段,可能不再走该优化。
  • 具体优化效果依表内数据和具体语句而定。
  • 根据表数据量优化。
最后修改时间:2024-12-30 11:15:05
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论