optimizers

package
v0.0.0-...-e6fb8a6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 16, 2022 License: Apache-2.0 Imports: 1 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

默认使用的优化器

View Source
var PredicatePushDownOptimizer = Optimizer{
	Name:        "PredicatePushDownOptimizer",
	Description: "Push predicates to scan plan",
	Reassembler: func(plan planners.IPlan) {
		var scan *planners.ScanPlan
		var filter *planners.FilterPlan

		visit := func(plan planners.IPlan) (kontinue bool, err error) {
			switch plan := plan.(type) {
			case *planners.ScanPlan:
				scan = plan
			case *planners.FilterPlan:
				filter = plan
			}
			return true, nil
		}
		if err := planners.Walk(visit, plan); err != nil {
			return
		}

		if scan != nil && filter != nil {
			scan.Filter = filter
		}
	},
}

PredicatePushDownOptimizer 谓词下推优化器,把filter条件往树上方移动

View Source
var ProjectPushDownOptimizer = Optimizer{
	Name:        "ProjectPushDownOptimizer",
	Description: "Push projects to scan plan",
	Reassembler: func(plan planners.IPlan) {
		var scan *planners.ScanPlan
		var project *planners.ProjectionPlan

		visit := func(plan planners.IPlan) (kontinue bool, err error) {
			switch plan := plan.(type) {
			case *planners.ScanPlan:
				scan = plan
			case *planners.ProjectionPlan:
				project = plan
			}
			return true, nil
		}
		if err := planners.Walk(visit, plan); err != nil {
			return
		}

		if scan != nil && project != nil {
			scan.Project = project
		}
	},
}

ProjectPushDownOptimizer 映射下推,不读取多余的列

Functions

func Optimize

func Optimize(plan planners.IPlan, optimizers []Optimizer) planners.IPlan

Types

type Optimizer

type Optimizer struct {

	// 优化器的名称
	Name string

	// 优化器的作用描述,但是似乎也没用到?
	Description string

	// 优化器的优化方法,对传入的执行计划做优化
	Reassembler func(planners.IPlan)
}

优化器的定义

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL