精华内容
下载资源
问答
  • MySQL服务器 MySQL服务器 ...6、MySQL数据库优化 一、MySQL原理简介 MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表格中,而不将所有数据放在同一个大仓库中,这样就...

    MySQL服务器

    一、MySQL原理简介

    MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表格中,而不将所有数据放在同一个大仓库中,这样就增加了速度并提高了灵活性。
    RDBMS是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统,常用的关系型数据库软件有:MySQL、MariaDB、Oracle、SQL Server、PostgreSQL、db2等

    RDBMS数据库的特点如下:

    • 数据以表格的形式出现
    • 每行记录数据的真实内容
    • 每列记录数据真实内容的数据域
    • 无数的行和列组成一张表
    • 若干的表组成一个数据库

    MySQL数据库运行在服务器前,需要选择启动的引擎。
    MySQL引擎包括:ISAM、MyISAM、InnoDB、Memory、CSV、BlackHole、Archive、Performance_Schema、Berkeley、Merge、Federated、Cluster/NDB等,其中MyISAM、InnoDB使用最为广泛,以下为MyISAM、BDB、Memory、InnoDB以及Archive之间的引擎功能的对比。

    引擎特性 MyISAM BDB Memory InnoDB Archive
    批量插入的速度 非常高
    集群索引 不支持 不支持 不支持 支持 不支持
    数据缓存 不支持 不支持 支持 支持 不支持
    索引缓存 支持 不支持 支持 支持 不支持
    数据可压缩 支持 不支持 不支持 不支持 支持
    硬盘空间使用 null 非常低
    内存使用 中等
    外键支持 不支持 不支持 不支持 支持 不支持
    存储限制 没有 没有 64TB 没有
    事务安全 不支持 支持 不支持 支持 不支持
    锁机制 表锁 页锁 表锁 行锁 行锁
    B树索引 支持 支持 支持 支持 不支持
    哈希索引 不支持 不支持 支持 支持 不支持
    全文索引 支持 不支持 不支持 不支持 不支持

    性能总结如下:

    1. MyISAM、MySQL 5.0之前的默认数据库引擎,最为常用。拥有较高的插入、查询速度,但不支持事务。
    2. InnoDB事务型数据库的首选引擎,支持ACID事务,ACID包括原子性、一致性、隔离性、持久性,一个支持事务的数据库,必须具有这四个特性,否则在执行事务的过程中无法保证数据的正确性。
    3. MySQL 5.5之后默认引擎为InnoDB,InnoDB支持行级锁定,支持事务、外键等功能。
    4. BDB源自Berkeley DB,事务型数据库的另一种选择,支持Commit和Rollback等其他事务特性。
    5. Memory所有数据置于内存的存储引擎,拥有极高的插入、更新和查询效率。但是会占用和数据量成正比的内存空间,并且其内容会在MySQL重新启动时丢失。

    MySQL常用的两大引擎有MyISAM和InnoDB,那么它们只见的区别是什么?可根据不同的场合该如何进行选择?
    MyISAM类型的数据库表强调的是性能,其执行速度比InnoDB类型更快,但不支持事务提供,不支持外键,如果执行大量的select操作,MyISAM是更好的选择,支持表锁。 InnoDB提供事务支持事务、外键、行锁等功能,执行大量的insert或update操作,出于性能方面的考虑,可以使用InnoDB引擎。

    二、数据库简单操作

    1、MySQL数据库安装

    MySQL数据库安装方式有两种,一种是通过yum/rpm安装,还有一种是通过源码软件编译安装,源码编译安装在lnmp这篇博客中有详细过程。
    通过yum安装的话:
    rhel6.X 安装yum install mysql-server mysql-devel mysql-libs -y
    rhel7.X 安装yum install mariadb-server mariadb mariadb-libs -y

    2、MySQL字符集设置

    MySQL数据库在存储数据时,默认编码是latin1,存储中文字符时,在显示或者web调用时会显示为乱码,所以需要修改MySQL默认字符集为UTF-8,有两种方法:
    1. 编辑vim /etc/my.cnf配置文件,在相应段中加入相应的参数字符集,修改完毕后,重启MySQL服务器即可,具体内容如下:

      [client]字段中加入:default-character-set=utf8
      [mysqld]字段中加入:character-set-server=utf8
      [mysql]字段中加入:default-character-set=utf8

    2.MySQL命令行中运行如下指令

      show variables like '%char%';
      SET character_set_client = utf8;
      SET character_set_results = utf8;
      SET character_set_connection = utf8;

    最终显示为以下结果,则表示字符集设置完成
    这里写图片描述

    3、MySQL数据库密码管理

    MySQL数据库在使用过程中为了加强安全防范,需要设置密码访问

    (1) MySQL创建用户及授权

    #授权localhost主机通过test用户和lcl密码访问本地的test库的查询、插入、更新、删除权限
    MariaDB [(none)]> grant select,insert,update,delete on test.* to test@localhost identified by 'lcl';
    Query OK, 0 rows affected (0.00 sec)
    
    #授权所有主机通过test用户和test密码访问本地test库的所有权限
    grant all on test.* to test@'%' identified by 'test';

    (2) MySQL密码破解方法

    在使用MySQL数据库中,偶尔会出现密码忘记的情况。要破解MySQL密码,首先要停止MySQL数据库,以跳过权限的方式启动,然后在shell中执行mysql命令,修改密码,并且重新启动mysql

    [root@server1 ~]# systemctl stop mariadb
    [root@server1 ~]# mysqld_safe --user=mysql --skip-grant-tables &
    [1] 1416
    [root@server1 ~]# 180805 19:24:38 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
    180805 19:24:38 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
    
    [root@server1 ~]# mysql
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 1
    Server version: 5.5.44-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> use mysql
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    MariaDB [mysql]> update user set password=password('123456') where user='root';
    Query OK, 3 rows affected (0.00 sec)
    Rows matched: 3  Changed: 3  Warnings: 0
    
    MariaDB [mysql]> exit
    Bye
    [root@server1 ~]# systemctl start mariadb
    [root@server1 ~]# mysql -uroot -p123456
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 3
    Server version: 5.5.44-MariaDB MariaDB Server
    
    Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    MariaDB [(none)]> 

    4、MySQL数据库索引

    MySQL数据库索引可以用来快速寻找某些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果MySQL没有索引,执行select时会从第一个记录开始扫描整个表的所有记录,直到找到符合要求的记录。如果在需要搜索条件的列上创建了索引,MySQL无须扫描全表记录即可快速得到相应的记录行。
    MySQL数据库常见索引类型包括:普通索引(normal),唯一索引(unique),全文索引(full text),主键索引(primary key),组合索引等。

    • 普通索引:normal,使用最为广泛
    • 唯一索引:unique,不允许重复的索引,允许有空值
    • 全文索引:full text,只能用于MyISAM,full text主要用于大量的内容检索
    • 主键索引:primary key又称为特殊的唯一索引,不允许有空值
    • 组合索引:为提高MySQL效率可建立组合索引

    MySQL数据库创建、查看、删除各个索引命令(都以t1表为例)

    创建索引:
    主键索引:ALTER TABLE t1 ADD PRIMARY KEY('column');
    唯一索引:ALTER TABLE t1 ADD UNIQUE('column');
    普通索引:ALTER TABLE t1 ADD INDEX index_name('column');
    全文索引:ALTER TABLE t1 ADD FULETEXT('column');
    组合索引:ALTER TABLE t1 ADD INDEX index_name(column1,column2);
    
    查看表索引
    show index from t1;
    show keys from t1;
    
    删除索引
    DROP INDEX index_name ON t1;
    ALTER TABLE t1 DROP INDEX index_name;
    ALTER TABLE t1 DROP PRIMARY KEY;

    MySQL数据库索引的缺点:

    • MySQL数据库索引虽然能提高数据库的查询速度,但同时会降低更新、删除、插入表的速度,例如对表进行insert,update,delete时,update表MySQL不仅要保存数据,还要保存更新索引;
    • 建立索引会占用磁盘空间,大表上创建了多种索引组合,索引文件就会占用大量的空间。

    5、MySQL数据库慢查询

    MySQL数据库慢查询主要用于跟踪异常的SQL语句,可以分析出当前程序里哪些SQL语句比较耗费资源,慢查询日志则用来记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值的SQL语句,会被记录到慢查询日志中。

    MySQL数据库默认没有开启慢查询日志功能,需要手动在配置文件或者MySQL命令行中开启,慢查询日志默认写入磁盘中的文件,也可以将慢查询日志写入到数据库表中。

    查看数据库是否开启慢查询,命令如下:

    show variables like '%slow%';
    show variables like '%long_query%';

    这里写图片描述

    这里写图片描述

    MySQL慢查询参数详解

    log_show_queries:关闭慢查询日志功能
    long_query_time:慢查询超时时间,默认为10s,MySQL 5.55以上可以设置微秒
    slow_query_log:关闭慢查询日志
    show_query_log_file:慢查询日志文件
    slow_launch_time:thread create时间,单位为秒,如果thread create时间超过了这个值,该变量slow_launch_time值会加1
    log-queries-not-using-indexes:记录未添加索引的SQL语句

    开启MySQL慢查询日志方法有以下两种
    1. MySQL数据库命令行执行命令

    set global slow_query_log = on;
    show variables like '%slow%';
    1. 编辑my.cnf配置文件
    log-slow-queries = /data/mysql/slow.log 
    log_query_time = 0.01
    log-queries-using-indexes

    这里写图片描述


    慢查询功能开启之后,数据库会自动将执行时间超过设定时间的SQL语句添加到慢查询日志文件中,可以通过慢查询日志文件定位到执行慢的SQL,从而对其优化,可以通过mysqldumpslow命令行工具分析日志

    执行命令mysqldumpslow -h可以查看命令帮助信息,主要参数包括-s 和 -t,其中 - s是排序参数,可选项详解如下

    • l:查询锁的总时间
    • r:返回记录数
    • t:查询总时间排序
    • al:平均锁定时间
    • ar:平均返回记录数
    • at:平均查询时间
    • c:计数
    • -t n :显示头n条记录
    • -g :过滤
    MySQL慢查询按照返回的行数从大到小,查看前两行:
    mysqldumpslow -s r -t 2 slow.log
    
    按照查询总时间从大到小,查看前5行,同时过滤select的SQL语句
    mysqldumpslow -s t -t 5 -g "select" slow.log

    6、MySQL数据库优化

    MySQL数据库具体优化包括:配置文件的优化、SQL语句的优化、表结构的优化、索引的优化
    而配置的优化包括:系统内核、硬件资源、内存、CPU、MySQL本身配置文件的优化
    硬件上的优化有两种方式:一种是增加内存和提高磁盘读写速度,进而提高MySQL数据库的查询、更新的速度;另一种提高MySQL性能的方式是使用多块磁盘来存储数据,可以从多块磁盘上并行读取数据,进而提高读取数据的速度
    MySQL参数的优化,内存中会为MySQL保留部分的缓冲区,这些缓冲区可以提高MySQL的速度,缓冲区的大小可以在MySQL的配置文件中设置

    展开全文
  • SQL优化简介

    2019-03-09 11:43:00
    虽然加索引并不一定能解决问题,但是这初步的体现了SQL优化思想。 而数据库主要由三部分组成,分别是解析器、优化器和执行引擎。 其执行逻辑是我们输入的SQL语句通过解析器解析成关系表达式,通过优化器把关系...

    文章导读:

    1. 什么是RBO?
    2. 什么是CBO?

    我们在工作中经常会听到这样的声音:“SQL查询慢?你给数据库加个索引啊”。虽然加索引并不一定能解决问题,但是这初步的体现了SQL优化的思想。

    而数据库主要由三部分组成,分别是解析器优化器执行引擎

    585224-20190309114438695-923373096.jpg

    其执行逻辑是我们输入的SQL语句通过解析器解析成关系表达式,通过优化器把关系表达式转换成执行计划,最终通过执行引擎进行执行。所以优化器在很大程度上决定了一个系统的性能。优化器的作用就好比找到两点之间的最短路径。
    上篇文章我们提到了Calcite,Calcite本身就支持两种优化方式分别是RBO和CBO。

    RBO

    RBO(Rule-Based Optimizer) 基于规则的优化器。是根据已经制定好的一些优化规则对关系表达式进行转换,最终生成一个最优的执行计划。它是一种经验式的优化方法,优化规则都是预先定义好的,只需要将SQL按照优化规则的顺序往上套就行,一旦满足某个规则则进行优化。
    这样的结果就是同样一条SQL,无论读取的表中的数据是怎样的,最后生成的执行计划都是一样的(优化规则都一样)。而且SQL的写法不同也很有可能影响最终的执行计划,从而影响SQL的性能(基于优化规则顺序执行)。
    所以说,虽然RBO是一个老司机,知道常见的套路,但是当路况不同时,也无法针对性的达到最佳的效果。

    CBO

    CBO(Cost-Based Optimizer)基于代价的优化器。根据优化规则对关系表达式进行转换,生成多个执行计划,最后根据统计信息和代价模型计算每个执行计划的Cost。从中挑选Cost最小的执行计划作为最终的执行计划。
    从描述来看,CBO是优于RBO的,RBO只认规则,对数据不敏感,而在实际的过程中,数据的量级会严重影响同样SQL的性能。所以仅仅通过RBO生成的执行计划很有可能不是最优的。而CBO依赖于统计信息和代价模型,统计信息的准确与否、代价模型是否合理都会影响CBO选择最优计划。
    目前各大数据库和大数据计算引擎都已经在使用CBO了,比如Oracle、Hive、Spark、Flink等等。

    动态CBO

    动态CBO,就是在执行计划生成的过程中动态优化的方式。随着大数据技术的飞速发展,静态的CBO已经无法满足我们SQL优化的需要了,静态的统计信息无法提供准确的参考,在执行计划的生成过程中动态统计才会得到最优的执行计划。
    那么优化器的执行过程是怎样的呢?又有哪些优化规则呢?(请看下回分解~)

    参考资料:

    https://zhuanlan.zhihu.com/p/40478975

    欢迎关注微信公众号 叁金大数据 ~

    转载于:https://www.cnblogs.com/jixin/p/10500096.html

    展开全文
  • cartographer 代码思想解读(14)- 后端优化核心类PoseGraph2D Mapbuilder中引入了整个slam分为前端和后端两部分,其中后端核心接口为PoseGraph,并且分为2d和3d两种情况,2d声明接口为PoseGraph2D。 global_...

    Mapbuilder中引入了整个slam分为前端和后端两部分,其中后端核心接口为PoseGraph,并且分为2d和3d两种情况,2d声明接口为PoseGraph2D。

    global_trajectory_builder中引入了后端PoseGraph2D核心类接口的调用,即前端匹配的后的结果类matching_result加入到后端AddNode接口。

    PoseGraph2D成员

    const proto::PoseGraphOptions options_;                             // 配置信息
      GlobalSlamOptimizationCallback global_slam_optimization_callback_;  // 回调,传出优化结果
      mutable absl::Mutex mutex_;                                         // 锁
      absl::Mutex work_queue_mutex_;                                      // 处理缓存数据锁
    
      // If it exists, further work items must be added to this queue, and will be
      // considered later.
      std::unique_ptr<WorkQueue> work_queue_ GUARDED_BY(work_queue_mutex_); // 相当于一个缓存buffer,将要处理的数据缓存
    
      // We globally localize a fraction of the nodes from each trajectory.
      absl::flat_hash_map<int, std::unique_ptr<common::FixedRatioSampler>>
          global_localization_samplers_ GUARDED_BY(mutex_);
    
      // Number of nodes added since last loop closure.
      int num_nodes_since_last_loop_closure_ GUARDED_BY(mutex_) = 0;        // 自从上次闭环处理后增加的node的个数
    
      // Current optimization problem.
      std::unique_ptr<optimization::OptimizationProblem2D> optimization_problem_; // 优化器
      constraints::ConstraintBuilder2D constraint_builder_;                       // 约束构造器
    
      // Thread pool used for handling the work queue.
      common::ThreadPool* const thread_pool_;                                     // 线程池,可处理work queue
    
      // List of all trimmers to consult when optimizations finish.
      std::vector<std::unique_ptr<PoseGraphTrimmer>> trimmers_ GUARDED_BY(mutex_);
    
      PoseGraphData data_ GUARDED_BY(mutex_);                                     // PoseGraphData全局数据
    
      ValueConversionTables conversion_tables_;                                   // value变换查询表
    
    

    其中大部分为全局内部成员的构建结构函数,其中PoseGraphData data_为后端处理的全局数据,其详细成员为

    struct PoseGraphData {
      // Submaps get assigned an ID and state as soon as they are seen, even
      // before they take part in the background computations.
      MapById<SubmapId, InternalSubmapData> submap_data;                             // submap 对应的submapID集合
    
      // Global submap poses currently used for displaying data.
      MapById<SubmapId, optimization::SubmapSpec2D> global_submap_poses_2d;          // submap的全局位置
      MapById<SubmapId, optimization::SubmapSpec3D> global_submap_poses_3d;
    
      // Data that are currently being shown.
      MapById<NodeId, TrajectoryNode> trajectory_nodes;                              // scanID 与trajectory对应集合
    
      // Global landmark poses with all observations.
      std::map<std::string /* landmark ID */, PoseGraphInterface::LandmarkNode>
          landmark_nodes;
    
      // How our various trajectories are related.
      TrajectoryConnectivityState trajectory_connectivity_state;                    // 轨迹之间的状态
      int num_trajectory_nodes = 0;
      std::map<int, InternalTrajectoryState> trajectories_state;                    // 轨迹状态集合
    
      // Set of all initial trajectory poses.
      std::map<int, PoseGraph::InitialTrajectoryPose> initial_trajectory_poses;     // 每个trajectory的初始位置
    
      std::vector<PoseGraphInterface::Constraint> constraints;                      // 约束队列
    };
    

    成员中的submap_data则为前端输出的子图,而trajectory_nodes为所有节点对象,constraints则为节点与子图之间的相对位姿,即所谓的约束。这三部分则构成了上节介绍的优化的位姿态图结构基本元素。其中trajectory_nodes数据格式在LocalTrajectoryBuilder2D类已经分析过,主要存储了每个node节点的激光和匹配结果信息包括位置,重力加速度方向,修正后的水平点云数据等。

    submap新封装InternalSubmapData

    // graph 中存储的submap格式
    struct InternalSubmapData {
      std::shared_ptr<const Submap> submap;
      SubmapState state = SubmapState::kNoConstraintSearch;
    
      // IDs of the nodes that were inserted into this map together with
      // constraints for them. They are not to be matched again when this submap
      // becomes 'kFinished'.
      // 插入该地图的scan ID集合,在此submap称为kFinished时无需进行match
      std::set<NodeId> node_ids;
    };
    
    

    在后端posegraph类中的submap增加了nodeid和state两个信息,其中node_id则为插入到本submap中的所有的nodeid集合,可用于区别node节点是否为本submap的内部节点;而state则表示当前submap是否更新完成。之所以存在state,是因为如果当前submap完成更新时,则会被要求与之前所有的节点进行匹配,则可以认为是一个闭环操作。

    约束类constraints定义

    上节简单讲解了cartographer后端优化的基本原理,引入了位姿图的概念,位姿图之间的关系称为约束,即节点之间的关系或者节点与submap的相对关系等。

      struct Constraint {
        struct Pose {
          transform::Rigid3d zbar_ij;    // 两个graph node的相对位姿
          double translation_weight;     // 平移权重
          double rotation_weight;        // 旋转权重
        };
    
        SubmapId submap_id;  // 'i' in the paper. submap对应index的信息,同时指示trajectory id
        NodeId node_id;      // 'j' in the paper. scan对应index的信息,同时指示trajectory id
    
        // Pose of the node 'j' relative to submap 'i'.
        Pose pose;           // scan节点对应在submap中的位置 
    
        // Differentiates between intra-submap (where node 'j' was inserted into
        // submap 'i') and inter-submap constraints (where node 'j' was not inserted
        // into submap 'i').
        enum Tag { INTRA_SUBMAP, INTER_SUBMAP } tag;  // 表示当前节点scan对应的submap是否为插入的
      };
    

    其中的SubmapId和NodeId则为记录在整个slam轨迹中唯一的submap和node ID号。由于cartographer支持多条轨迹,前面章节已经提过,用于理解可简单认为trajectory仅有一条即可。(由于可能多条,故SubmapId和NodeId中也包含了trajectory id的信息)
    cartographer中的约束仅是每个节点与submap的相对关系,实际上节点间也存在,但是有一定的重复。详看上面的定义,其中pose则为node j在submap i中的位置,即记录了对应node和submap之间的相对位姿。
    约束也被区分为是否为构建对应的submap的成员,从而区分中约束为前端匹配约束还是闭环约束,其状态由INTRA_SUBMAPINTER_SUBMAP两种标志表示。

    ConstraintBuilder2D约束构造器

    cartographer优化的位姿图中节点为submap和轨迹节点则有前端匹配构成,而之间约束则需要约束构造器完成。每增加一个新的轨迹节点时则需要增加约束,每完成一个submap创建时同样也需要增加约束。cartographer则采用了一个专门的构造器进行计算约束并维护。后面文章将详解讲解。

    OptimizationProblem2D优化器

    有了位姿图和约束关系,即可创建超定方程组,可采用优化方法进行求解,而cartographer采用了SPA的优化方案进行优化求解,求得每个节点和submap最佳全局位姿使得超定方程组误差最小,即完成SLAM,后面将单独详细分析源码。

    展开全文
  • 分享:SQL优化简介

    2019-02-20 15:48:32
    虽然加索引并不一定能解决问题,但是这体现了SQL优化思想。  而数据库主要由三部分组成,分别是解析器、优化器和执行引擎。  其执行逻辑是我们输入的SQL语句通过解析器解析成关系表达式,通过优化器把关系...

      SQL优化是我们经常会遇到的问题,无论你是专职的数据分析人员还是全栈开发大神或者是CURD搬运工。

      我们在工作中经常会听到这样的声音:“查询慢?加个索引吧”。虽然加索引并不一定能解决问题,但是这体现了SQL优化的思想。

      而数据库主要由三部分组成,分别是解析器、优化器和执行引擎。

      其执行逻辑是我们输入的SQL语句通过解析器解析成关系表达式,通过优化器把关系表达式转换成执行计划,最终通过执行引擎进行执行。所以优化器在很大程度上决定了一个系统的性能。优化器的作用就好比找到两点之间的最短路径。

      上篇文章我们提到了Calcite,Calcite本身就支持两种优化方式分别是RBO和CBO。

      RBO

      RBO(Rule-Based Optimizer) 基于规则的优化器。是根据已经制定好的一些优化规则对关系表达式进行转换,最终生成一个最优的执行计划。它是一种经验式的优化方法,优化规则都是预先定义好的,只需要将SQL按照优化规则的顺序往上套就行,一旦满足某个规则则进行优化。

      这样的结果就是同样一条SQL,无论读取的表中的数据是怎样的,最后生成的执行计划都是一样的(优化规则都一样)。而且SQL的写法不同也很有可能影响最终的执行计划,从而影响SQL的性能(基于优化规则顺序执行)。

      所以说,虽然RBO是一个老司机,知道常见的套路,但是当路况不同时,无法针对性的达到最佳的效果。

      CBO

      CBO(Cost-Based Optimizer)基于代价的优化器。根据优化规则对关系表达式进行转换,生成多个执行计划,最后根据统计信息和代价模型计算每个执行计划的Cost。从中挑选Cost最小的执行计划作为最终的执行计划。

      从描述来看,CBO是优于RBO的,RBO只认规则,对数据不敏感,而在实际的过程中,数据的量级会严重影响同样SQL的性能。所以仅仅通过RBO生成的执行计划很有可能不是最优的。而CBO依赖于统计信息和代价模型,统计信息的准确与否、代价模型是否合理都会影响CBO选择最优计划。

      目前各大数据库和大数据计算引擎都已经在使用CBO了,比如Oracle、Hive、Spark、Flink等等。

      动态CBO

      顾名思义,就是在执行计划生成的过程中动态优化的方式。随着大数据技术的飞速发展,静态的CBO已经无法满足我们SQL优化的需要了,静态的统计信息无法提供准确的参考,在执行计划的生成过程中动态统计才会得到最优的执行计划。

    展开全文
  • 优化简介3

    2020-03-16 16:02:50
    文章目录松弛与近似1. 一阶近似2. 局部最快下降3....大部分的非线性优化的方法基于松弛的思想,如果序列{αk}k=0∞\{\alpha_{k}\}^{\infty}_{k=0}{αk​}k=0∞​中,αk+1≤αk,∀k≥0.\alpha_{k+1} \leq ...
  • 深度学习中的优化器的思想来源基本上都是梯度下降(Gradient Descent) 根据以上框架,我们来分析和比较梯度下降的各种变种算法。 Vanilla SGD(朴素SGD) 朴素SGD最为简单且没有动量的概念。 注意这里的I2是指单位...
  • 一、排序算法简介 1、排序算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不...
  • 1.分治法将问题划分为互不相交的子问题,递归的求解子问题,再将它们的解组合起来,求出原问题的解。但是这样会 做许多不必要的工作,它会重复地求解那些公共的子...通常用来求解最优化问题。设计动态规划步骤1.刻画一
  • 动态规划(Dynamic Programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。
  • 优化算法1:模拟退火算法思想解析

    千次阅读 2016-09-02 18:28:25
    1.算法简介 模拟退火算法得益于材料的统计力学的研究成果。统计力学表明材料中粒子的不同结构对应于粒子的不同能量水平。在高温条件下,粒子的能量较高,可以自由运动和重新排列。在低温条件下,粒子能量较低。如果...
  • 【Python】画3d图(网格优化图)简介

    千次阅读 2019-02-20 13:50:14
    基本思想:使用matplotlib创建画布,然后使用mpl_toolkits包的Axes3D函数将其转化为3d图画布。 先导入主要用到的函数: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d impor.....
  • 一、锁机制简介1.行级锁(row-level)操作时,锁记录,颗粒度最小,并发好,锁资源消耗大。主要针对innodb存储引擎2.表级锁 (table-level)锁表,并发差,锁资源消耗小。表级锁主要针对myisam存储引擎3.页级锁 (page-...
  • 一、简介       归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,...
  • 环境介绍硬件配置软件环境优化层级与指导思想优化层级MySQL数据库优化可以在多个不同的层级进行,常见的有:SQL优化参数优化架构优化本文重点关注:参数优化指导思想日志先行 -- 一个事务能否成功提交的关键是日志...
  • 蚁群优化算法

    千次阅读 2019-11-05 15:06:25
    蚁群优化算法基本思想3.蚁群优化算法设计流程4.代码实现5.运行结果与分析 1.蚁群优化算法简介 蚁群算法是一种用来寻找优化路径的概率型算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找...
  • 粒子群优化算法思想3. 粒子群优化算法的基本框架4. 对粒子群优化算法中惯性权重的认识5. 粒子群优化算法举例——求解旅行商问题6. 参考文献  同进化算法(见博客《[Evolutionary Algorithm] 进化算法简介》,进化...
  • 异步优化的核心思想:子线程来分担主线程的任务,并减少运行时间 接着上期的内容,通过卡顿定位,找到我们卡顿处的代码 public class MyApplication extends Application { @Override public void onCreate() {
  • 贝叶斯优化参数

    千次阅读 2018-10-25 20:55:09
    Snoek(2012)提出,主要思想是,给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道内部结构以及数学性质),通过不断地添加样本点来更新目标函数的后验分布(高斯过程,直到后验分布基本贴合于真实分布...
  • 剪枝思想

    2020-12-07 10:59:16
    剪枝思想 一、剪枝策略的寻觅的方法 微观方法:从问题本身动身,发现剪枝条件 宏观方法:从整体动身,发现剪枝条件。 注意提高效力,这是关键,最重要的。 总之,剪枝策略,属于算法优化范畴;通常利用在DFS 和 ...
  • 粒子群优化算法

    千次阅读 多人点赞 2018-12-02 18:23:02
    文章目录粒子群优化算法1、简介2、思想粒子群优化算法分析粒子群优化算法应用总结 粒子群优化算法 1、简介 粒子群算法,也称粒子群优化算法或鸟群觅食算法,英文为:Particle Swarm Optimization,缩写为 PSO, 是由...
  • MySQL瓶颈分析与优化

    2018-06-13 01:43:14
    作者:蒋乐兴 简介 通过sysbench的oltp_read_write测试来模拟...优化层级与指导思想 优化层级MySQL数据库优化可以在多个不同的层级进行,常见的有: SQL优化 参数优化 架构优化 本文重点关注:参数优化 指导思想...
  • 异步优化的核心思想:子线程来分担主线程的任务,并减少运行时间 接着上期的内容,通过卡顿定位,找到我们卡顿处的代码 public class MyApplication extends Application { @Override public v
  • 一、简介 粒子群优化(PSO)是一种基于群体智能的数值优化算法,由社会心理学家James Kennedy和电气工程师Russell Eberhart于1995年提出。自PSO诞生以来,它在许多方面都得到了改进,这一部分将介绍基本的粒子群优化...
  • 一、简介 粒子群优化(PSO)是一种基于群体智能的数值优化算法,由社会心理学家James Kennedy和电气工程师Russell Eberhart于1995年提出。自PSO诞生以来,它在许多方面都得到了改进,这一部分将介绍基本的粒子群优化...
  • MySQL 瓶颈分析及优化

    2018-08-27 23:39:00
    简介 通过sysbench的oltp_read_write测试来模拟业务压力、以此来给...优化层级与指导思想 优化层级 MySQL数据库优化可以在多个不同的层级进行,常见的有: SQL优化 参数优化 架构优化 ...
  • 基础目的粒子群优化算法PSOParticle Swarm Optimization利用粒子群中粒子的协作找到最优解粒子群优化算法发展简介粒子群优化算法的基本思想基本粒子群算法描述基本粒子群优化算法的算法流程算法例子改进算法简介粒子...
  • 冒泡排序及其优化

    2020-08-09 17:20:25
    冒泡排序及其优化简介定义算法与优化常规方法第一次优化第二次优化性能分析 简介 冒泡排序是最基础与直观的排序方法之一。想象烧开水的时候,因为气泡的密度比水小,小气泡会从水壶底部慢慢升起。而冒泡排序之所以叫...
  • 一、简介 粒子群优化(PSO)是一种基于群体智能的数值优化算法,由社会心理学家James Kennedy和电气工程师Russell Eberhart于1995年提出。自PSO诞生以来,它在许多方面都得到了改进,这一部分将介绍基本的粒子群优化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 703
精华内容 281
关键字:

优化思想简介