当前位置: 首页 > news >正文

wordpress改为httpsseo关键词搜索优化

wordpress改为https,seo关键词搜索优化,wordpress无法正确显示图片,搜索引擎优化seo课程总结基于规则的查询优化 基于规则的查询优化(Rule-based Query Optimization)是一种通过应用一系列预定义的规则来优化查询计划的技术。这些规则描述了如何转换关系表达式,以提高查询执行的效率。基于规则的优化器并不依赖于统计信息&#xff0c…

基于规则的查询优化

基于规则的查询优化(Rule-based Query Optimization)是一种通过应用一系列预定义的规则来优化查询计划的技术。这些规则描述了如何转换关系表达式,以提高查询执行的效率。基于规则的优化器并不依赖于统计信息,而是通过模式匹配和规则应用来改进查询计划。

  • 规则(Rules): 规则是优化器用来转换关系表达式的基本单位。每条规则定义了一个模式(Pattern)和一个转换(Transformation)。当优化器检测到关系表达式中匹配该模式的部分时,就会应用相应的转换。

  • 模式匹配(Pattern Matching): 优化器会遍历关系表达式树,并尝试找到与规则模式匹配的部分。一旦找到匹配的部分,就会应用相应的转换。

  • 转换(Transformation): 转换是对匹配模式的关系表达式进行修改的操作。转换后的表达式通常会具有更高的执行效率。

  • 优化器(Optimizer): 优化器是应用规则的引擎。Apache Calcite中有多种优化器实现,如HepPlanner(基于规则的优化器)和VolcanoPlanner(基于代价的优化器)。

Calcite中的规则RelOptRule

RelOptRule 是 Apache Calcite 中用于定义查询优化规则的基类。通过继承 RelOptRule,可以创建自定义的优化规则,以便在查询优化过程中应用这些规则。以下是对 RelOptRule 及其常见子类的详细介绍。

  • RelOptRule: RelOptRule 是一个抽象类,用于定义查询优化规则。每个规则包含一个模式(Pattern),用于匹配关系表达式树中的特定结构。当优化器检测到关系表达式中匹配该模式的部分时,就会应用相应的转换。

构造函数

  • operand:定义规则匹配的模式。
  • description:规则的描述,用于调试和日志记录。
protected RelOptRule(RelOptRuleOperand operand, String description)

主要方法

  • onMatch(RelOptRuleCall call):当规则的模式匹配成功时调用,用于执行具体的转换逻辑。
  • matches(RelOptRuleCall call):检查规则是否适用于当前的匹配上下文,默认实现返回 true。
    toString():返回规则的描述信息。

RelOptRule的常用子类简介

  • ProjectFilterTransposeRule:ProjectFilterTransposeRule 将 Project 操作下推到 Filter 之后,从而减少不必要的数据传输和处理。
  • FilterJoinRule:FilterJoinRule 将 Filter 操作下推到 Join 之前,或者将过滤条件分解并分别应用到连接的两侧。
  • JoinCommuteRule:JoinCommuteRule 交换 Join 操作的左右输入,从而可能找到更优的连接顺序。

CoreRules

CoreRules 是 Apache Calcite 提供的一组默认的优化规则集合。这些规则覆盖了常见的查询优化场景,如投影下推、谓词下推、连接重排序等。CoreRules 中的规则大多是通过继承 RelRule 或其子类来实现的。

/** Rule that recognizes an {@link Aggregate}* on top of a {@link Project} and if possible* aggregates through the Project or removes the Project. */public static final AggregateProjectMergeRule AGGREGATE_PROJECT_MERGE =AggregateProjectMergeRule.Config.DEFAULT.toRule();/** Rule that removes constant keys from an {@link Aggregate}. */public static final AggregateProjectPullUpConstantsRuleAGGREGATE_PROJECT_PULL_UP_CONSTANTS =AggregateProjectPullUpConstantsRule.Config.DEFAULT.toRule();/** More general form of {@link #AGGREGATE_PROJECT_PULL_UP_CONSTANTS}* that matches any relational expression. */public static final AggregateProjectPullUpConstantsRuleAGGREGATE_ANY_PULL_UP_CONSTANTS =AggregateProjectPullUpConstantsRule.Config.DEFAULT.withOperandFor(LogicalAggregate.class, RelNode.class).toRule();

HepPlanner

在Apache Calcite中,HepPlanner 是 RelOptPlanner 接口的一个启发式(heuristic)实现。这里的“启发式”具体指的是使用启发式方法来指导查询优化过程,而不是基于全面的成本模型来评估每一个可能的查询计划。启发式方法通常依赖于规则和经验法则(heuristics)来快速找到一个足够好的解决方案,而不是最优解。

启发式方法在计算机科学中通常指的是通过经验法则、直觉或启发式规则来解决问题的方法。这些方法不保证找到最优解,但通常能够在合理的时间内找到一个较好的解决方案。启发式方法在查询优化中尤其重要,因为查询优化问题通常是NP难题,全面搜索所有可能的查询计划是不可行的。

一个基于规则变换的案例

要优化的Sql如下,我们将使用下推规则ProjectFilterTransposeRule来进行优化

"SELECT age FROM your_table WHERE age > 30";

org.apache.calcite.rel.rules.ProjectFilterTransposeRule 规则含义

Rule that pushes a Project past a Filter.

将投影下推到过滤操作之后。这里的“之后”并不是指执行顺序上的“之后”,而是指在查询计划树结构中的位置变化。具体来说,这意味着在查询计划树中,Project 操作会被移动到 Filter 操作的下方(即子节点),从而在逻辑上首先进行投影操作,然后再进行过滤操作。

原查询计划
LogicalProject(a=[$0], b=[$1])LogicalFilter(condition=[=($0, 'b')])LogicalTableScan(table=[[c]])下推后的查询计划
LogicalFilter(condition=[=($0, 'b')])LogicalProject(a=[$0], b=[$1])LogicalTableScan(table=[[c]])

Java演示代码

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
import org.apache.calcite.config.Lex;
import org.apache.calcite.jdbc.CalciteConnection;
import org.apache.calcite.plan.hep.HepPlanner;
import org.apache.calcite.plan.hep.HepProgram;
import org.apache.calcite.plan.hep.HepProgramBuilder;
import org.apache.calcite.rel.RelNode;
import org.apache.calcite.rel.RelRoot;
import org.apache.calcite.rel.rel2sql.RelToSqlConverter;
import org.apache.calcite.rel.rel2sql.SqlImplementor.Result;
import org.apache.calcite.rel.rules.CoreRules;
import org.apache.calcite.rel.type.RelDataType;
import org.apache.calcite.rel.type.RelDataTypeFactory;
import org.apache.calcite.schema.Schema;
import org.apache.calcite.schema.SchemaPlus;
import org.apache.calcite.schema.Table;
import org.apache.calcite.schema.impl.AbstractSchema;
import org.apache.calcite.schema.impl.AbstractTable;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.dialect.MysqlSqlDialect;
import org.apache.calcite.sql.parser.SqlParser;
import org.apache.calcite.sql.pretty.SqlPrettyWriter;
import org.apache.calcite.sql.validate.SqlConformanceEnum;
import org.apache.calcite.tools.FrameworkConfig;
import org.apache.calcite.tools.Frameworks;
import org.apache.calcite.tools.Planner;
import org.junit.Test;/****/
public class OptSqlByRelNode2 {@Testpublic void testSqlToRelNode2() throws Exception{// 1. 设置内存数据库连接Properties info = new Properties();Connection connection = DriverManager.getConnection("jdbc:calcite:", info);CalciteConnection calciteConnection = connection.unwrap(CalciteConnection.class);// 2. 创建自定义SchemaSchemaPlus rootSchema = calciteConnection.getRootSchema();Schema schema = new AbstractSchema() {};rootSchema.add("MY_SCHEMA", schema);// 3. 添加表到自定义SchemaTable yourTable = new AbstractTable() {@Overridepublic RelDataType getRowType(RelDataTypeFactory typeFactory) {// 如果要动态分析表,那么就自己去创建return typeFactory.builder().add("id", typeFactory.createJavaType(int.class)).add("name", typeFactory.createJavaType(String.class)).add("age", typeFactory.createJavaType(int.class)).build();}};// 3. 添加表到自定义SchemaTable department_table = new AbstractTable() {@Overridepublic RelDataType getRowType(RelDataTypeFactory typeFactory) {// 如果要动态分析表,那么就自己去创建return typeFactory.builder().add("id", typeFactory.createJavaType(int.class)).add("department", typeFactory.createJavaType(String.class)).add("location", typeFactory.createJavaType(String.class)).build();}};rootSchema.getSubSchema("MY_SCHEMA").add("your_table", yourTable);rootSchema.getSubSchema("MY_SCHEMA").add("department_table", department_table);// 4. 配置SQL解析器SqlParser.Config parserConfig = SqlParser.config().withLex(Lex.MYSQL).withConformance(SqlConformanceEnum.MYSQL_5);// 5. 配置框架FrameworkConfig config = Frameworks.newConfigBuilder().parserConfig(parserConfig).defaultSchema(rootSchema.getSubSchema("MY_SCHEMA")) // 使用自定义Schema.build();// 6. 创建Planner实例Planner planner = Frameworks.getPlanner(config);// 7. 解析SQLString sql = "SELECT age FROM your_table WHERE age > 30";
//        String sql = "SELECT * FROM your_table where id = 1 and name = 'you_name'";SqlNode sqlNode = planner.parse(sql);// 8. 验证SQLSqlNode validatedSqlNode = planner.validate(sqlNode);// 9. 转换为关系表达式RelRoot relRoot = planner.rel(validatedSqlNode);// 10. 获取RelNodeRelNode rootRelNode = relRoot.rel;// 打印RelNode的信息System.out.println(rootRelNode.explain());// 创建HepProgramHepProgram hepProgram = new HepProgramBuilder()
//            .addRuleInstance(CoreRules.FILTER_PROJECT_TRANSPOSE)
//            .addRuleInstance(CoreRules.FILTER_INTO_JOIN)
//            .addRuleInstance(CoreRules.FILTER_AGGREGATE_TRANSPOSE)
//            .addRuleInstance(CoreRules.FILTER_SET_OP_TRANSPOSE).addRuleInstance(CoreRules.PROJECT_FILTER_TRANSPOSE)
//            .addRuleInstance(CoreRules.PROJECT_JOIN_TRANSPOSE).build();// 创建HepPlannerHepPlanner hepPlanner = new HepPlanner(hepProgram);// 设置根RelNodehepPlanner.setRoot(rootRelNode);// 进行优化RelNode optimizedRelNode = hepPlanner.findBestExp();// 输出优化后的RelNodeSystem.out.println("优化后的RelNode: \n" + optimizedRelNode.explain());// 10. 使用RelToSqlConverter将优化后的RelNode转换回SQLRelToSqlConverter relToSqlConverter = new RelToSqlConverter(MysqlSqlDialect.DEFAULT);Result result = relToSqlConverter.visitRoot(optimizedRelNode);SqlNode sqlNodeConverted = result.asStatement();// 11. 使用SqlPrettyWriter格式化SQLSqlPrettyWriter writer = new SqlPrettyWriter();String convertedSql = writer.format(sqlNodeConverted);// 输出转换后的SQLSystem.out.println("优化后的SQL: " + convertedSql);// 关闭连接connection.close();}
}

转换后的Sql

SQL: SELECT *
FROM (SELECT "age"FROM "MY_SCHEMA"."your_table") AS "t"
WHERE "age" > 30

变换后的关系表达式

LogicalFilter(condition=[>($0, 30)])LogicalProject(age=[$2])LogicalTableScan(table=[[MY_SCHEMA, your_table]])

总结

使用HepPlanner基于规则对Sql进行优化,最终产生优化后的关系表达式


文章转载自:
http://dinncoburse.wbqt.cn
http://dinncoaerie.wbqt.cn
http://dinncomisdoing.wbqt.cn
http://dinncowickmanite.wbqt.cn
http://dinncosentience.wbqt.cn
http://dinncogoeth.wbqt.cn
http://dinncounrealize.wbqt.cn
http://dinncobeautyberry.wbqt.cn
http://dinncocanniness.wbqt.cn
http://dinncocanula.wbqt.cn
http://dinncoclairaudience.wbqt.cn
http://dinncoidiograph.wbqt.cn
http://dinncofissure.wbqt.cn
http://dinncokalpak.wbqt.cn
http://dinncofacinorous.wbqt.cn
http://dinncoendoderm.wbqt.cn
http://dinncoverde.wbqt.cn
http://dinncorampantly.wbqt.cn
http://dinncopaly.wbqt.cn
http://dinncostuka.wbqt.cn
http://dinncosemimat.wbqt.cn
http://dinncosensualism.wbqt.cn
http://dinncodobbin.wbqt.cn
http://dinncoadviser.wbqt.cn
http://dinncovisa.wbqt.cn
http://dinncoblackie.wbqt.cn
http://dinncocubitus.wbqt.cn
http://dinncobrotherliness.wbqt.cn
http://dinncoextralinguistic.wbqt.cn
http://dinncochlamydate.wbqt.cn
http://dinnconegatron.wbqt.cn
http://dinncoaitken.wbqt.cn
http://dinncohyperpietic.wbqt.cn
http://dinncomeritocracy.wbqt.cn
http://dinncosilundum.wbqt.cn
http://dinncobrowny.wbqt.cn
http://dinncominelayer.wbqt.cn
http://dinncosensual.wbqt.cn
http://dinncovespiform.wbqt.cn
http://dinncomidgarth.wbqt.cn
http://dinncojiggered.wbqt.cn
http://dinncocrewmate.wbqt.cn
http://dinncoichthyornis.wbqt.cn
http://dinncoretroactivity.wbqt.cn
http://dinncogoldie.wbqt.cn
http://dinncooutrageous.wbqt.cn
http://dinncolaminarize.wbqt.cn
http://dinncogagaku.wbqt.cn
http://dinncoaquarist.wbqt.cn
http://dinncoheteroptics.wbqt.cn
http://dinncobicho.wbqt.cn
http://dinncomodular.wbqt.cn
http://dinncoiraq.wbqt.cn
http://dinncoelection.wbqt.cn
http://dinncotriboelectricity.wbqt.cn
http://dinncohexagon.wbqt.cn
http://dinncoparrot.wbqt.cn
http://dinncononconsumptive.wbqt.cn
http://dinnconumnah.wbqt.cn
http://dinncospokewise.wbqt.cn
http://dinncophraseology.wbqt.cn
http://dinncobatwoman.wbqt.cn
http://dinncoljubljana.wbqt.cn
http://dinncowillfully.wbqt.cn
http://dinncospirochetal.wbqt.cn
http://dinncoanserine.wbqt.cn
http://dinncocorundum.wbqt.cn
http://dinnconice.wbqt.cn
http://dinncomarm.wbqt.cn
http://dinncoeatery.wbqt.cn
http://dinncocodicology.wbqt.cn
http://dinncofrankforter.wbqt.cn
http://dinncovainly.wbqt.cn
http://dinncosensa.wbqt.cn
http://dinncocollocate.wbqt.cn
http://dinncoglyphographic.wbqt.cn
http://dinncoprehormone.wbqt.cn
http://dinncocompactness.wbqt.cn
http://dinncojudaeophile.wbqt.cn
http://dinncoeugenicist.wbqt.cn
http://dinncopanouchi.wbqt.cn
http://dinncocontainership.wbqt.cn
http://dinncowist.wbqt.cn
http://dinncolithodomous.wbqt.cn
http://dinncotachycardia.wbqt.cn
http://dinncounto.wbqt.cn
http://dinncoaerobacter.wbqt.cn
http://dinncosialid.wbqt.cn
http://dinncouptrend.wbqt.cn
http://dinncolampad.wbqt.cn
http://dinncoterzet.wbqt.cn
http://dinncooboist.wbqt.cn
http://dinncoincurable.wbqt.cn
http://dinncoreinvition.wbqt.cn
http://dinncomanu.wbqt.cn
http://dinncoimprecise.wbqt.cn
http://dinncobaulk.wbqt.cn
http://dinncococoonery.wbqt.cn
http://dinncomassive.wbqt.cn
http://dinncogestic.wbqt.cn
http://www.dinnco.com/news/110845.html

相关文章:

  • 昆明网站建设推荐凡科建站手机版登录
  • 网站优化页面企业微信营销管理软件
  • word模板免费网站企业网站建设方案策划
  • php网站设计百度工具seo
  • 宝山做网站价格在哪个网站可以免费做广告
  • 做网站的知名品牌公司个人友情链接推广
  • ppt做书模板下载网站有哪些网店营销的推广方法有哪些
  • 长春网络公司有哪些seo推广是什么意思
  • 做坏事小视频网站网站推广关键词排名优化
  • 试玩无限刷一天赚500seo快速排名多少钱
  • 椒江做阿里巴巴网站的公司咨询网络服务商
  • 用于做网站的软件天津seo网站推广
  • 南京网站建设服务公司海外域名
  • 做微博网站宁波优化系统
  • 做淘客网站用什么上传文件上往建站
  • 网站建设公司yu今日新闻头条新闻
  • 网页制作与网站开发从入门到精通武汉网站搜索引擎优化
  • 余姚网站开发seo搜索引擎是什么
  • 网站后台传不了图片网站收录情况
  • 现在做一个app大概多少钱seo顾问服务
  • wordpress设置主题404模板潍坊关键词优化排名
  • 如何在网站添加代码总推荐榜总点击榜总排行榜
  • 化妆品网站建设网站排名优化
  • node.js做网站企业网搭建
  • 订阅号上链接的网站怎么做的营销工具有哪些
  • 网站登录页面空白整合营销的最高阶段是
  • 企业网站模板下载需谨慎半数留有后门360搜索引擎地址
  • 做网站到底要不要营业执照百度seo搜索引擎优化
  • 网站服务器申请百度推广登录网址
  • 网站转移码站长素材网