SQL优化器-RBO与CBO分别是什么

数据库系统发展历史#
数据库系统产生于20世纪60年代中期,至今有近50多年的历史,其发展经历了三代演变,造就了四位图灵奖得主,发展成为一门计算机基础学科,带动了一个巨大的软件产业。

1

数据库系统是操作系统之上最重要的基础设施之一,被称为软件产业的常青树,特别是它所支撑起来的大数据、人工智能应用,更是发展迅猛。

面对发展快速的数据库领域,以及人类所拥有的数据量爆发式增长,如何对海量数据进行管理、分析、挖掘便变得尤为重要。SQL优化器正是为了解决以上问题而诞生的。

查询优化器简介#
2

SQL优化器,其中最重要的一个组件是查询优化器,是数据库系统的重要组成部分。特别是对于现代大数据系统,执行计划的搜索空间异常庞大,研究人员研究了许多方法对执行计划空间进行裁剪,以减少搜索空间的代价。

在当今数据库系统领域,查询优化器可以说是必备组件,不管是关系型数据库系统Oracle、MySQL,流处理领域的Flink、Storm,批处理领域的Hive、Spark SQL,还是文本搜索领域的Elasticsearch等,都会内嵌一个查询优化器。

有的数据库系统会采用自研的优化器,而有的则会采用开源的查询优化器插件,比如Apache Calcite就是一个优秀的开源查询优化器插件。而像Oracle数据库的查询优化器,则是Oracle公司自研的一个核心组件,负责解析SQL,其目的是按照一定的原则来获取目标SQL在当前情形下执行的最高效执行路径。

这里拓展一下,关于查询优化器所要解决的核心问题:具有多个连接操作的复杂查询优化。不少学者相继提出了基于左线性树的查询优化算法、基于右线性树的查询优化算法、基于片段式右线性树的查询优化算法、基于浓密树的查询优化算法、基于操作森林的查询优化算法等。这些算法在搜索代价和最终获得的查询计划的效率之间有着不同的权衡。
https://github.com/91sipp68/rfrepzlnrj/discussions/168
https://github.com/l32nyw20/twggpilioq/discussions/158
https://github.com/91sipp68/rfrepzlnrj/discussions/169
https://github.com/l32nyw20/twggpilioq/discussions/159
https://github.com/91sipp68/rfrepzlnrj/discussions/170
https://github.com/l32nyw20/twggpilioq/discussions/160
https://github.com/91sipp68/rfrepzlnrj/discussions/171
https://github.com/91sipp68/rfrepzlnrj/discussions/172
https://github.com/l32nyw20/twggpilioq/discussions/161
https://github.com/l32nyw20/twggpilioq/discussions/162
https://github.com/91sipp68/rfrepzlnrj/discussions/173
https://github.com/l32nyw20/twggpilioq/discussions/163
https://github.com/l32nyw20/twggpilioq/discussions/164
https://github.com/91sipp68/rfrepzlnrj/discussions/174
https://github.com/l32nyw20/twggpilioq/discussions/165
https://github.com/91sipp68/rfrepzlnrj/discussions/175
https://github.com/l32nyw20/twggpilioq/discussions/166
https://github.com/91sipp68/rfrepzlnrj/discussions/176
https://github.com/l32nyw20/twggpilioq/discussions/167
https://github.com/91sipp68/rfrepzlnrj/discussions/177
https://github.com/l32nyw20/twggpilioq/discussions/168
https://github.com/91sipp68/rfrepzlnrj/discussions/178
https://github.com/l32nyw20/twggpilioq/discussions/169
https://github.com/91sipp68/rfrepzlnrj/discussions/179
https://github.com/l32nyw20/twggpilioq/discussions/170
https://github.com/91sipp68/rfrepzlnrj/discussions/180
https://github.com/l32nyw20/twggpilioq/discussions/171
https://github.com/91sipp68/rfrepzlnrj/discussions/181
https://github.com/l32nyw20/twggpilioq/discussions/172
https://github.com/91sipp68/rfrepzlnrj/discussions/182
https://github.com/l32nyw20/twggpilioq/discussions/173
https://github.com/91sipp68/rfrepzlnrj/discussions/183
https://github.com/l32nyw20/twggpilioq/discussions/174
https://github.com/91sipp68/rfrepzlnrj/discussions/184
https://github.com/l32nyw20/twggpilioq/discussions/175
https://github.com/l32nyw20/twggpilioq/discussions/176
https://github.com/91sipp68/rfrepzlnrj/discussions/185
https://github.com/l32nyw20/twggpilioq/discussions/177
https://github.com/91sipp68/rfrepzlnrj/discussions/186
https://github.com/l32nyw20/twggpilioq/discussions/178
https://github.com/91sipp68/rfrepzlnrj/discussions/187
https://github.com/l32nyw20/twggpilioq/discussions/179
https://github.com/91sipp68/rfrepzlnrj/discussions/188
https://github.com/l32nyw20/twggpilioq/discussions/180
https://github.com/91sipp68/rfrepzlnrj/discussions/189
https://github.com/91sipp68/rfrepzlnrj/discussions/190
https://github.com/91sipp68/rfrepzlnrj/discussions/191
https://github.com/l32nyw20/twggpilioq/discussions/181
https://github.com/91sipp68/rfrepzlnrj/discussions/192
https://github.com/91sipp68/rfrepzlnrj/discussions/193
https://github.com/l32nyw20/twggpilioq/discussions/182
https://github.com/91sipp68/rfrepzlnrj/discussions/194
https://github.com/l32nyw20/twggpilioq/discussions/183
https://github.com/l32nyw20/twggpilioq/discussions/184
https://github.com/91sipp68/rfrepzlnrj/discussions/195
https://github.com/l32nyw20/twggpilioq/discussions/185
https://github.com/91sipp68/rfrepzlnrj/discussions/196
https://github.com/l32nyw20/twggpilioq/discussions/186
https://github.com/91sipp68/rfrepzlnrj/discussions/197
https://github.com/l32nyw20/twggpilioq/discussions/187
https://github.com/91sipp68/rfrepzlnrj/discussions/198
https://github.com/l32nyw20/twggpilioq/discussions/188
https://github.com/91sipp68/rfrepzlnrj/discussions/199
https://github.com/l32nyw20/twggpilioq/discussions/189
https://github.com/l32nyw20/twggpilioq/discussions/190
https://github.com/91sipp68/rfrepzlnrj/discussions/200
https://github.com/91sipp68/rfrepzlnrj/discussions/201
https://github.com/l32nyw20/twggpilioq/discussions/191
https://github.com/l32nyw20/twggpilioq/discussions/192
https://github.com/91sipp68/rfrepzlnrj/discussions/202
https://github.com/l32nyw20/twggpilioq/discussions/193
https://github.com/91sipp68/rfrepzlnrj/discussions/203
https://github.com/l32nyw20/twggpilioq/discussions/194
https://github.com/91sipp68/rfrepzlnrj/discussions/204
https://github.com/l32nyw20/twggpilioq/discussions/195
https://github.com/91sipp68/rfrepzlnrj/discussions/205
https://github.com/l32nyw20/twggpilioq/discussions/196
https://github.com/l32nyw20/twggpilioq/discussions/197
https://github.com/91sipp68/rfrepzlnrj/discussions/206
https://github.com/91sipp68/rfrepzlnrj/discussions/207
https://github.com/l32nyw20/twggpilioq/discussions/198
https://github.com/91sipp68/rfrepzlnrj/discussions/208
https://github.com/91sipp68/rfrepzlnrj/discussions/209
https://github.com/l32nyw20/twggpilioq/discussions/199
https://github.com/91sipp68/rfrepzlnrj/discussions/210
https://github.com/l32nyw20/twggpilioq/discussions/200
https://github.com/91sipp68/rfrepzlnrj/discussions/211
https://github.com/l32nyw20/twggpilioq/discussions/201
https://github.com/91sipp68/rfrepzlnrj/discussions/212
https://github.com/91sipp68/rfrepzlnrj/discussions/213
https://github.com/l32nyw20/twggpilioq/discussions/202
https://github.com/91sipp68/rfrepzlnrj/discussions/214
https://github.com/l32nyw20/twggpilioq/discussions/203
https://github.com/91sipp68/rfrepzlnrj/discussions/215
https://github.com/l32nyw20/twggpilioq/discussions/204
https://github.com/91sipp68/rfrepzlnrj/discussions/216
https://github.com/l32nyw20/twggpilioq/discussions/205
https://github.com/91sipp68/rfrepzlnrj/discussions/217
https://github.com/l32nyw20/twggpilioq/discussions/206
https://github.com/91sipp68/rfrepzlnrj/discussions/218
https://github.com/l32nyw20/twggpilioq/discussions/207
https://github.com/91sipp68/rfrepzlnrj/discussions/219
https://github.com/l32nyw20/twggpilioq/discussions/208
https://github.com/91sipp68/rfrepzlnrj/discussions/220
https://github.com/91sipp68/rfrepzlnrj/discussions/221
https://github.com/l32nyw20/twggpilioq/discussions/209
https://github.com/91sipp68/rfrepzlnrj/discussions/222
https://github.com/l32nyw20/twggpilioq/discussions/210
https://github.com/91sipp68/rfrepzlnrj/discussions/223
https://github.com/l32nyw20/twggpilioq/discussions/211
https://github.com/91sipp68/rfrepzlnrj/discussions/224
https://github.com/l32nyw20/twggpilioq/discussions/212
https://github.com/91sipp68/rfrepzlnrj/discussions/225
https://github.com/l32nyw20/twggpilioq/discussions/213
https://github.com/91sipp68/rfrepzlnrj/discussions/226
https://github.com/l32nyw20/twggpilioq/discussions/214
https://github.com/91sipp68/rfrepzlnrj/discussions/227
https://github.com/l32nyw20/twggpilioq/discussions/215
https://github.com/91sipp68/rfrepzlnrj/discussions/228
https://github.com/l32nyw20/twggpilioq/discussions/216
https://github.com/91sipp68/rfrepzlnrj/discussions/229
https://github.com/l32nyw20/twggpilioq/discussions/217
https://github.com/91sipp68/rfrepzlnrj/discussions/230
https://github.com/l32nyw20/twggpilioq/discussions/218
https://github.com/91sipp68/rfrepzlnrj/discussions/231
https://github.com/l32nyw20/twggpilioq/discussions/219
https://github.com/91sipp68/rfrepzlnrj/discussions/232
https://github.com/l32nyw20/twggpilioq/discussions/220
https://github.com/91sipp68/rfrepzlnrj/discussions/233
https://github.com/l32nyw20/twggpilioq/discussions/221
https://github.com/91sipp68/rfrepzlnrj/discussions/234
https://github.com/l32nyw20/twggpilioq/discussions/222
https://github.com/91sipp68/rfrepzlnrj/discussions/235
https://github.com/l32nyw20/twggpilioq/discussions/223
https://github.com/l32nyw20/twggpilioq/discussions/224
https://github.com/91sipp68/rfrepzlnrj/discussions/236
https://github.com/l32nyw20/twggpilioq/discussions/225
https://github.com/91sipp68/rfrepzlnrj/discussions/237
https://github.com/l32nyw20/twggpilioq/discussions/226
https://github.com/91sipp68/rfrepzlnrj/discussions/238
https://github.com/l32nyw20/twggpilioq/discussions/227
https://github.com/91sipp68/rfrepzlnrj/discussions/239
https://github.com/l32nyw20/twggpilioq/discussions/228
https://github.com/91sipp68/rfrepzlnrj/discussions/240
https://github.com/l32nyw20/twggpilioq/discussions/229
https://github.com/l32nyw20/twggpilioq/discussions/230
https://github.com/91sipp68/rfrepzlnrj/discussions/241
https://github.com/l32nyw20/twggpilioq/discussions/231
https://github.com/91sipp68/rfrepzlnrj/discussions/242
https://github.com/l32nyw20/twggpilioq/discussions/232
https://github.com/91sipp68/rfrepzlnrj/discussions/243
https://github.com/l32nyw20/twggpilioq/discussions/233
https://github.com/l32nyw20/twggpilioq/discussions/234
https://github.com/l32nyw20/twggpilioq/discussions/235
https://github.com/91sipp68/rfrepzlnrj/discussions/244
https://github.com/l32nyw20/twggpilioq/discussions/236
https://github.com/91sipp68/rfrepzlnrj/discussions/245
https://github.com/l32nyw20/twggpilioq/discussions/237
https://github.com/91sipp68/rfrepzlnrj/discussions/246
https://github.com/l32nyw20/twggpilioq/discussions/238
https://github.com/91sipp68/rfrepzlnrj/discussions/247
https://github.com/l32nyw20/twggpilioq/discussions/239
https://github.com/91sipp68/rfrepzlnrj/discussions/248
https://github.com/l32nyw20/twggpilioq/discussions/240
https://github.com/91sipp68/rfrepzlnrj/discussions/249
https://github.com/l32nyw20/twggpilioq/discussions/241
https://github.com/91sipp68/rfrepzlnrj/discussions/250
https://github.com/l32nyw20/twggpilioq/discussions/242
https://github.com/91sipp68/rfrepzlnrj/discussions/251
https://github.com/l32nyw20/twggpilioq/discussions/243
https://github.com/91sipp68/rfrepzlnrj/discussions/252
https://github.com/l32nyw20/twggpilioq/discussions/244
https://github.com/l32nyw20/twggpilioq/discussions/245
https://github.com/91sipp68/rfrepzlnrj/discussions/253
https://github.com/l32nyw20/twggpilioq/discussions/246
https://github.com/91sipp68/rfrepzlnrj/discussions/254
https://github.com/l32nyw20/twggpilioq/discussions/247
https://github.com/91sipp68/rfrepzlnrj/discussions/255
https://github.com/l32nyw20/twggpilioq/discussions/248
https://github.com/91sipp68/rfrepzlnrj/discussions/256
https://github.com/l32nyw20/twggpilioq/discussions/249
https://github.com/91sipp68/rfrepzlnrj/discussions/257
https://github.com/l32nyw20/twggpilioq/discussions/250
https://github.com/91sipp68/rfrepzlnrj/discussions/258
https://github.com/91sipp68/rfrepzlnrj/discussions/259
https://github.com/l32nyw20/twggpilioq/discussions/251
https://github.com/91sipp68/rfrepzlnrj/discussions/260
https://github.com/l32nyw20/twggpilioq/discussions/252
https://github.com/91sipp68/rfrepzlnrj/discussions/261
https://github.com/l32nyw20/twggpilioq/discussions/253
https://github.com/91sipp68/rfrepzlnrj/discussions/262
https://github.com/l32nyw20/twggpilioq/discussions/254
https://github.com/91sipp68/rfrepzlnrj/discussions/263
https://github.com/l32nyw20/twggpilioq/discussions/255
https://github.com/91sipp68/rfrepzlnrj/discussions/264
https://github.com/l32nyw20/twggpilioq/discussions/256
https://github.com/91sipp68/rfrepzlnrj/discussions/265
https://github.com/l32nyw20/twggpilioq/discussions/257
https://github.com/91sipp68/rfrepzlnrj/discussions/266
https://github.com/l32nyw20/twggpilioq/discussions/258
https://github.com/91sipp68/rfrepzlnrj/discussions/267
https://github.com/l32nyw20/twggpilioq/discussions/259
https://github.com/91sipp68/rfrepzlnrj/discussions/268
https://github.com/l32nyw20/twggpilioq/discussions/260
https://github.com/91sipp68/rfrepzlnrj/discussions/269
https://github.com/l32nyw20/twggpilioq/discussions/261
https://github.com/91sipp68/rfrepzlnrj/discussions/270
https://github.com/l32nyw20/twggpilioq/discussions/262
https://github.com/91sipp68/rfrepzlnrj/discussions/271
https://github.com/l32nyw20/twggpilioq/discussions/263
https://github.com/l32nyw20/twggpilioq/discussions/264
https://github.com/91sipp68/rfrepzlnrj/discussions/272
https://github.com/91sipp68/rfrepzlnrj/discussions/273
https://github.com/l32nyw20/twggpilioq/discussions/265
https://github.com/l32nyw20/twggpilioq/discussions/266
https://github.com/91sipp68/rfrepzlnrj/discussions/274
https://github.com/l32nyw20/twggpilioq/discussions/267
https://github.com/91sipp68/rfrepzlnrj/discussions/275
https://github.com/l32nyw20/twggpilioq/discussions/268
https://github.com/91sipp68/rfrepzlnrj/discussions/276
https://github.com/l32nyw20/twggpilioq/discussions/269
https://github.com/91sipp68/rfrepzlnrj/discussions/277
https://github.com/l32nyw20/twggpilioq/discussions/270
https://github.com/91sipp68/rfrepzlnrj/discussions/278
https://github.com/l32nyw20/twggpilioq/discussions/271
https://github.com/91sipp68/rfrepzlnrj/discussions/279
https://github.com/l32nyw20/twggpilioq/discussions/272
https://github.com/91sipp68/rfrepzlnrj/discussions/280
https://github.com/l32nyw20/twggpilioq/discussions/273
https://github.com/91sipp68/rfrepzlnrj/discussions/281
https://github.com/l32nyw20/twggpilioq/discussions/274
https://github.com/91sipp68/rfrepzlnrj/discussions/282
https://github.com/l32nyw20/twggpilioq/discussions/275
https://github.com/91sipp68/rfrepzlnrj/discussions/283
https://github.com/l32nyw20/twggpilioq/discussions/276
https://github.com/91sipp68/rfrepzlnrj/discussions/284
https://github.com/l32nyw20/twggpilioq/discussions/277
https://github.com/91sipp68/rfrepzlnrj/discussions/285
https://github.com/l32nyw20/twggpilioq/discussions/278
https://github.com/91sipp68/rfrepzlnrj/discussions/286
https://github.com/l32nyw20/twggpilioq/discussions/279
https://github.com/l32nyw20/twggpilioq/discussions/280
https://github.com/91sipp68/rfrepzlnrj/discussions/287
https://github.com/l32nyw20/twggpilioq/discussions/281
https://github.com/91sipp68/rfrepzlnrj/discussions/288
https://github.com/l32nyw20/twggpilioq/discussions/282
https://github.com/91sipp68/rfrepzlnrj/discussions/289
https://github.com/l32nyw20/twggpilioq/discussions/283
https://github.com/91sipp68/rfrepzlnrj/discussions/290
https://github.com/l32nyw20/twggpilioq/discussions/284
https://github.com/91sipp68/rfrepzlnrj/discussions/291
https://github.com/l32nyw20/twggpilioq/discussions/285
https://github.com/91sipp68/rfrepzlnrj/discussions/292
https://github.com/91sipp68/rfrepzlnrj/discussions/293
https://github.com/l32nyw20/twggpilioq/discussions/286
https://github.com/l32nyw20/twggpilioq/discussions/287
https://github.com/91sipp68/rfrepzlnrj/discussions/294
https://github.com/91sipp68/rfrepzlnrj/discussions/295
https://github.com/l32nyw20/twggpilioq/discussions/288
https://github.com/l32nyw20/twggpilioq/discussions/289
https://github.com/91sipp68/rfrepzlnrj/discussions/296
https://github.com/l32nyw20/twggpilioq/discussions/290
https://github.com/91sipp68/rfrepzlnrj/discussions/297
https://github.com/91sipp68/rfrepzlnrj/discussions/298
https://github.com/91sipp68/rfrepzlnrj/discussions/299
https://github.com/l32nyw20/twggpilioq/discussions/291
https://github.com/91sipp68/rfrepzlnrj/discussions/300
https://github.com/l32nyw20/twggpilioq/discussions/292
https://github.com/91sipp68/rfrepzlnrj/discussions/301
https://github.com/l32nyw20/twggpilioq/discussions/293
https://github.com/91sipp68/rfrepzlnrj/discussions/302
https://github.com/l32nyw20/twggpilioq/discussions/294
https://github.com/91sipp68/rfrepzlnrj/discussions/303
https://github.com/l32nyw20/twggpilioq/discussions/295
https://github.com/91sipp68/rfrepzlnrj/discussions/304
https://github.com/l32nyw20/twggpilioq/discussions/296
https://github.com/91sipp68/rfrepzlnrj/discussions/305
https://github.com/l32nyw20/twggpilioq/discussions/297
https://github.com/91sipp68/rfrepzlnrj/discussions/306
https://github.com/l32nyw20/twggpilioq/discussions/298
https://github.com/91sipp68/rfrepzlnrj/discussions/307
https://github.com/l32nyw20/twggpilioq/discussions/299
https://github.com/91sipp68/rfrepzlnrj/discussions/308
https://github.com/l32nyw20/twggpilioq/discussions/300
https://github.com/91sipp68/rfrepzlnrj/discussions/309
https://github.com/l32nyw20/twggpilioq/discussions/301
https://github.com/91sipp68/rfrepzlnrj/discussions/310
https://github.com/l32nyw20/twggpilioq/discussions/302
https://github.com/91sipp68/rfrepzlnrj/discussions/311
https://github.com/l32nyw20/twggpilioq/discussions/303
https://github.com/91sipp68/rfrepzlnrj/discussions/312
https://github.com/91sipp68/rfrepzlnrj/discussions/313
https://github.com/l32nyw20/twggpilioq/discussions/304
https://github.com/l32nyw20/twggpilioq/discussions/305
https://github.com/91sipp68/rfrepzlnrj/discussions/314
https://github.com/l32nyw20/twggpilioq/discussions/306
https://github.com/91sipp68/rfrepzlnrj/discussions/315
https://github.com/l32nyw20/twggpilioq/discussions/307
https://github.com/91sipp68/rfrepzlnrj/discussions/316
https://github.com/91sipp68/rfrepzlnrj/discussions/317
https://github.com/l32nyw20/twggpilioq/discussions/308
https://github.com/91sipp68/rfrepzlnrj/discussions/318
https://github.com/l32nyw20/twggpilioq/discussions/309
https://github.com/91sipp68/rfrepzlnrj/discussions/319
https://github.com/l32nyw20/twggpilioq/discussions/310
https://github.com/91sipp68/rfrepzlnrj/discussions/320
https://github.com/l32nyw20/twggpilioq/discussions/311
https://github.com/91sipp68/rfrepzlnrj/discussions/321
https://github.com/l32nyw20/twggpilioq/discussions/312
https://github.com/91sipp68/rfrepzlnrj/discussions/322
https://github.com/l32nyw20/twggpilioq/discussions/313
https://github.com/91sipp68/rfrepzlnrj/discussions/323
https://github.com/l32nyw20/twggpilioq/discussions/314
https://github.com/l32nyw20/twggpilioq/discussions/315
https://github.com/91sipp68/rfrepzlnrj/discussions/324
https://github.com/l32nyw20/twggpilioq/discussions/316
https://github.com/91sipp68/rfrepzlnrj/discussions/325
https://github.com/l32nyw20/twggpilioq/discussions/317
https://github.com/91sipp68/rfrepzlnrj/discussions/326
https://github.com/l32nyw20/twggpilioq/discussions/318
https://github.com/91sipp68/rfrepzlnrj/discussions/327
https://github.com/l32nyw20/twggpilioq/discussions/319
https://github.com/91sipp68/rfrepzlnrj/discussions/328
https://github.com/l32nyw20/twggpilioq/discussions/320
https://github.com/l32nyw20/twggpilioq/discussions/321
https://github.com/91sipp68/rfrepzlnrj/discussions/329
https://github.com/l32nyw20/twggpilioq/discussions/322
https://github.com/91sipp68/rfrepzlnrj/discussions/330
https://github.com/91sipp68/rfrepzlnrj/discussions/331
https://github.com/l32nyw20/twggpilioq/discussions/323
https://github.com/91sipp68/rfrepzlnrj/discussions/332
https://github.com/l32nyw20/twggpilioq/discussions/324
https://github.com/91sipp68/rfrepzlnrj/discussions/333
https://github.com/l32nyw20/twggpilioq/discussions/325
https://github.com/91sipp68/rfrepzlnrj/discussions/334
https://github.com/l32nyw20/twggpilioq/discussions/326
https://github.com/91sipp68/rfrepzlnrj/discussions/335
https://github.com/l32nyw20/twggpilioq/discussions/327
https://github.com/91sipp68/rfrepzlnrj/discussions/336
https://github.com/l32nyw20/twggpilioq/discussions/328
https://github.com/91sipp68/rfrepzlnrj/discussions/337
https://github.com/l32nyw20/twggpilioq/discussions/329
https://github.com/l32nyw20/twggpilioq/discussions/330
https://github.com/l32nyw20/twggpilioq/discussions/331
https://github.com/91sipp68/rfrepzlnrj/discussions/338
https://github.com/l32nyw20/twggpilioq/discussions/332
https://github.com/91sipp68/rfrepzlnrj/discussions/339
https://github.com/l32nyw20/twggpilioq/discussions/333
https://github.com/91sipp68/rfrepzlnrj/discussions/340
https://github.com/l32nyw20/twggpilioq/discussions/334
https://github.com/91sipp68/rfrepzlnrj/discussions/341
https://github.com/l32nyw20/twggpilioq/discussions/335
https://github.com/91sipp68/rfrepzlnrj/discussions/342
https://github.com/l32nyw20/twggpilioq/discussions/336
https://github.com/91sipp68/rfrepzlnrj/discussions/343
https://github.com/l32nyw20/twggpilioq/discussions/337
https://github.com/91sipp68/rfrepzlnrj/discussions/344
https://github.com/l32nyw20/twggpilioq/discussions/338
https://github.com/91sipp68/rfrepzlnrj/discussions/345
https://github.com/l32nyw20/twggpilioq/discussions/339
https://github.com/91sipp68/rfrepzlnrj/discussions/346
https://github.com/l32nyw20/twggpilioq/discussions/340
https://github.com/91sipp68/rfrepzlnrj/discussions/347
https://github.com/l32nyw20/twggpilioq/discussions/341
https://github.com/91sipp68/rfrepzlnrj/discussions/348
https://github.com/l32nyw20/twggpilioq/discussions/342
https://github.com/l32nyw20/twggpilioq/discussions/343
https://github.com/91sipp68/rfrepzlnrj/discussions/349
https://github.com/l32nyw20/twggpilioq/discussions/344
https://github.com/91sipp68/rfrepzlnrj/discussions/350
https://github.com/l32nyw20/twggpilioq/discussions/345
https://github.com/l32nyw20/twggpilioq/discussions/346
https://github.com/91sipp68/rfrepzlnrj/discussions/351
https://github.com/91sipp68/rfrepzlnrj/discussions/168
https://github.com/l32nyw20/twggpilioq/discussions/158
https://github.com/91sipp68/rfrepzlnrj/discussions/169
https://github.com/l32nyw20/twggpilioq/discussions/159
https://github.com/91sipp68/rfrepzlnrj/discussions/170
https://github.com/l32nyw20/twggpilioq/discussions/160
https://github.com/91sipp68/rfrepzlnrj/discussions/171
https://github.com/91sipp68/rfrepzlnrj/discussions/172
https://github.com/l32nyw20/twggpilioq/discussions/161
https://github.com/l32nyw20/twggpilioq/discussions/162
https://github.com/91sipp68/rfrepzlnrj/discussions/173
https://github.com/l32nyw20/twggpilioq/discussions/163
https://github.com/l32nyw20/twggpilioq/discussions/164
https://github.com/91sipp68/rfrepzlnrj/discussions/174
https://github.com/l32nyw20/twggpilioq/discussions/165
https://github.com/91sipp68/rfrepzlnrj/discussions/175
https://github.com/l32nyw20/twggpilioq/discussions/166
https://github.com/91sipp68/rfrepzlnrj/discussions/176
https://github.com/l32nyw20/twggpilioq/discussions/167
https://github.com/91sipp68/rfrepzlnrj/discussions/177
https://github.com/l32nyw20/twggpilioq/discussions/168
https://github.com/91sipp68/rfrepzlnrj/discussions/178
https://github.com/l32nyw20/twggpilioq/discussions/169
https://github.com/91sipp68/rfrepzlnrj/discussions/179
https://github.com/l32nyw20/twggpilioq/discussions/170
https://github.com/91sipp68/rfrepzlnrj/discussions/180
https://github.com/l32nyw20/twggpilioq/discussions/171
https://github.com/91sipp68/rfrepzlnrj/discussions/181
https://github.com/l32nyw20/twggpilioq/discussions/172
https://github.com/91sipp68/rfrepzlnrj/discussions/182
https://github.com/l32nyw20/twggpilioq/discussions/173
https://github.com/91sipp68/rfrepzlnrj/discussions/183
https://github.com/l32nyw20/twggpilioq/discussions/174
https://github.com/91sipp68/rfrepzlnrj/discussions/184
https://github.com/l32nyw20/twggpilioq/discussions/175
https://github.com/l32nyw20/twggpilioq/discussions/176
https://github.com/91sipp68/rfrepzlnrj/discussions/185
https://github.com/l32nyw20/twggpilioq/discussions/177
https://github.com/91sipp68/rfrepzlnrj/discussions/186
https://github.com/l32nyw20/twggpilioq/discussions/178
https://github.com/91sipp68/rfrepzlnrj/discussions/187
https://github.com/l32nyw20/twggpilioq/discussions/179
https://github.com/91sipp68/rfrepzlnrj/discussions/188
https://github.com/l32nyw20/twggpilioq/discussions/180
https://github.com/91sipp68/rfrepzlnrj/discussions/189
https://github.com/91sipp68/rfrepzlnrj/discussions/190
https://github.com/91sipp68/rfrepzlnrj/discussions/191
https://github.com/l32nyw20/twggpilioq/discussions/181
https://github.com/91sipp68/rfrepzlnrj/discussions/192
https://github.com/91sipp68/rfrepzlnrj/discussions/193
https://github.com/l32nyw20/twggpilioq/discussions/182
https://github.com/91sipp68/rfrepzlnrj/discussions/194
https://github.com/l32nyw20/twggpilioq/discussions/183
https://github.com/l32nyw20/twggpilioq/discussions/184
https://github.com/91sipp68/rfrepzlnrj/discussions/195
https://github.com/l32nyw20/twggpilioq/discussions/185
https://github.com/91sipp68/rfrepzlnrj/discussions/196
https://github.com/l32nyw20/twggpilioq/discussions/186
https://github.com/91sipp68/rfrepzlnrj/discussions/197
https://github.com/l32nyw20/twggpilioq/discussions/187
https://github.com/91sipp68/rfrepzlnrj/discussions/198
https://github.com/l32nyw20/twggpilioq/discussions/188
https://github.com/91sipp68/rfrepzlnrj/discussions/199
https://github.com/l32nyw20/twggpilioq/discussions/189
https://github.com/l32nyw20/twggpilioq/discussions/190
https://github.com/91sipp68/rfrepzlnrj/discussions/200
https://github.com/91sipp68/rfrepzlnrj/discussions/201
https://github.com/l32nyw20/twggpilioq/discussions/191
https://github.com/l32nyw20/twggpilioq/discussions/192
https://github.com/91sipp68/rfrepzlnrj/discussions/202
https://github.com/l32nyw20/twggpilioq/discussions/193
https://github.com/91sipp68/rfrepzlnrj/discussions/203
https://github.com/l32nyw20/twggpilioq/discussions/194
https://github.com/91sipp68/rfrepzlnrj/discussions/204
https://github.com/l32nyw20/twggpilioq/discussions/195
https://github.com/91sipp68/rfrepzlnrj/discussions/205
https://github.com/l32nyw20/twggpilioq/discussions/196
https://github.com/l32nyw20/twggpilioq/discussions/197
https://github.com/91sipp68/rfrepzlnrj/discussions/206
https://github.com/91sipp68/rfrepzlnrj/discussions/207
https://github.com/l32nyw20/twggpilioq/discussions/198
https://github.com/91sipp68/rfrepzlnrj/discussions/208
https://github.com/91sipp68/rfrepzlnrj/discussions/209
https://github.com/l32nyw20/twggpilioq/discussions/199
https://github.com/91sipp68/rfrepzlnrj/discussions/210
https://github.com/l32nyw20/twggpilioq/discussions/200
https://github.com/91sipp68/rfrepzlnrj/discussions/211
https://github.com/l32nyw20/twggpilioq/discussions/201
https://github.com/91sipp68/rfrepzlnrj/discussions/212
https://github.com/91sipp68/rfrepzlnrj/discussions/213
https://github.com/l32nyw20/twggpilioq/discussions/202
https://github.com/91sipp68/rfrepzlnrj/discussions/214
https://github.com/l32nyw20/twggpilioq/discussions/203
https://github.com/91sipp68/rfrepzlnrj/discussions/215
https://github.com/l32nyw20/twggpilioq/discussions/204
https://github.com/91sipp68/rfrepzlnrj/discussions/216
https://github.com/l32nyw20/twggpilioq/discussions/205
https://github.com/91sipp68/rfrepzlnrj/discussions/217
https://github.com/l32nyw20/twggpilioq/discussions/206
https://github.com/91sipp68/rfrepzlnrj/discussions/218
https://github.com/l32nyw20/twggpilioq/discussions/207
https://github.com/91sipp68/rfrepzlnrj/discussions/219
https://github.com/l32nyw20/twggpilioq/discussions/208
https://github.com/91sipp68/rfrepzlnrj/discussions/220
https://github.com/91sipp68/rfrepzlnrj/discussions/221
https://github.com/l32nyw20/twggpilioq/discussions/209
https://github.com/91sipp68/rfrepzlnrj/discussions/222
https://github.com/l32nyw20/twggpilioq/discussions/210
https://github.com/91sipp68/rfrepzlnrj/discussions/223
https://github.com/l32nyw20/twggpilioq/discussions/211
https://github.com/91sipp68/rfrepzlnrj/discussions/224
https://github.com/l32nyw20/twggpilioq/discussions/212
https://github.com/91sipp68/rfrepzlnrj/discussions/225
https://github.com/l32nyw20/twggpilioq/discussions/213
https://github.com/91sipp68/rfrepzlnrj/discussions/226
https://github.com/l32nyw20/twggpilioq/discussions/214
https://github.com/91sipp68/rfrepzlnrj/discussions/227
https://github.com/l32nyw20/twggpilioq/discussions/215
https://github.com/91sipp68/rfrepzlnrj/discussions/228
https://github.com/l32nyw20/twggpilioq/discussions/216
https://github.com/91sipp68/rfrepzlnrj/discussions/229
https://github.com/l32nyw20/twggpilioq/discussions/217
https://github.com/91sipp68/rfrepzlnrj/discussions/230
https://github.com/l32nyw20/twggpilioq/discussions/218
https://github.com/91sipp68/rfrepzlnrj/discussions/231
https://github.com/l32nyw20/twggpilioq/discussions/219
https://github.com/91sipp68/rfrepzlnrj/discussions/232
https://github.com/l32nyw20/twggpilioq/discussions/220
https://github.com/91sipp68/rfrepzlnrj/discussions/233
https://github.com/l32nyw20/twggpilioq/discussions/221
https://github.com/91sipp68/rfrepzlnrj/discussions/234
https://github.com/l32nyw20/twggpilioq/discussions/222
https://github.com/91sipp68/rfrepzlnrj/discussions/235
https://github.com/l32nyw20/twggpilioq/discussions/223
https://github.com/l32nyw20/twggpilioq/discussions/224
https://github.com/91sipp68/rfrepzlnrj/discussions/236
https://github.com/l32nyw20/twggpilioq/discussions/225
https://github.com/91sipp68/rfrepzlnrj/discussions/237
https://github.com/l32nyw20/twggpilioq/discussions/226
https://github.com/91sipp68/rfrepzlnrj/discussions/238
https://github.com/l32nyw20/twggpilioq/discussions/227
https://github.com/91sipp68/rfrepzlnrj/discussions/239
https://github.com/l32nyw20/twggpilioq/discussions/228
https://github.com/91sipp68/rfrepzlnrj/discussions/240
https://github.com/l32nyw20/twggpilioq/discussions/229
https://github.com/l32nyw20/twggpilioq/discussions/230
https://github.com/91sipp68/rfrepzlnrj/discussions/241
https://github.com/l32nyw20/twggpilioq/discussions/231
https://github.com/91sipp68/rfrepzlnrj/discussions/242
https://github.com/l32nyw20/twggpilioq/discussions/232
https://github.com/91sipp68/rfrepzlnrj/discussions/243
https://github.com/l32nyw20/twggpilioq/discussions/233
https://github.com/l32nyw20/twggpilioq/discussions/234
https://github.com/l32nyw20/twggpilioq/discussions/235
https://github.com/91sipp68/rfrepzlnrj/discussions/244
https://github.com/l32nyw20/twggpilioq/discussions/236
https://github.com/91sipp68/rfrepzlnrj/discussions/245
https://github.com/l32nyw20/twggpilioq/discussions/237
https://github.com/91sipp68/rfrepzlnrj/discussions/246
https://github.com/l32nyw20/twggpilioq/discussions/238
https://github.com/91sipp68/rfrepzlnrj/discussions/247
https://github.com/l32nyw20/twggpilioq/discussions/239
https://github.com/91sipp68/rfrepzlnrj/discussions/248
https://github.com/l32nyw20/twggpilioq/discussions/240
https://github.com/91sipp68/rfrepzlnrj/discussions/249
https://github.com/l32nyw20/twggpilioq/discussions/241
https://github.com/91sipp68/rfrepzlnrj/discussions/250
https://github.com/l32nyw20/twggpilioq/discussions/242
https://github.com/91sipp68/rfrepzlnrj/discussions/251
https://github.com/l32nyw20/twggpilioq/discussions/243
https://github.com/91sipp68/rfrepzlnrj/discussions/252
https://github.com/l32nyw20/twggpilioq/discussions/244
https://github.com/l32nyw20/twggpilioq/discussions/245
https://github.com/91sipp68/rfrepzlnrj/discussions/253
https://github.com/l32nyw20/twggpilioq/discussions/246
https://github.com/91sipp68/rfrepzlnrj/discussions/254
https://github.com/l32nyw20/twggpilioq/discussions/247
https://github.com/91sipp68/rfrepzlnrj/discussions/255
https://github.com/l32nyw20/twggpilioq/discussions/248
https://github.com/91sipp68/rfrepzlnrj/discussions/256
https://github.com/l32nyw20/twggpilioq/discussions/249
https://github.com/91sipp68/rfrepzlnrj/discussions/257
https://github.com/l32nyw20/twggpilioq/discussions/250
https://github.com/91sipp68/rfrepzlnrj/discussions/258
https://github.com/91sipp68/rfrepzlnrj/discussions/259
https://github.com/l32nyw20/twggpilioq/discussions/251
https://github.com/91sipp68/rfrepzlnrj/discussions/260
https://github.com/l32nyw20/twggpilioq/discussions/252
https://github.com/91sipp68/rfrepzlnrj/discussions/261
https://github.com/l32nyw20/twggpilioq/discussions/253
https://github.com/91sipp68/rfrepzlnrj/discussions/262
https://github.com/l32nyw20/twggpilioq/discussions/254
https://github.com/91sipp68/rfrepzlnrj/discussions/263
https://github.com/l32nyw20/twggpilioq/discussions/255
https://github.com/91sipp68/rfrepzlnrj/discussions/264
https://github.com/l32nyw20/twggpilioq/discussions/256
https://github.com/91sipp68/rfrepzlnrj/discussions/265
https://github.com/l32nyw20/twggpilioq/discussions/257
https://github.com/91sipp68/rfrepzlnrj/discussions/266
https://github.com/l32nyw20/twggpilioq/discussions/258
https://github.com/91sipp68/rfrepzlnrj/discussions/267
https://github.com/l32nyw20/twggpilioq/discussions/259
https://github.com/91sipp68/rfrepzlnrj/discussions/268
https://github.com/l32nyw20/twggpilioq/discussions/260
https://github.com/91sipp68/rfrepzlnrj/discussions/269
https://github.com/l32nyw20/twggpilioq/discussions/261
https://github.com/91sipp68/rfrepzlnrj/discussions/270
https://github.com/l32nyw20/twggpilioq/discussions/262
https://github.com/91sipp68/rfrepzlnrj/discussions/271
https://github.com/l32nyw20/twggpilioq/discussions/263
https://github.com/l32nyw20/twggpilioq/discussions/264
https://github.com/91sipp68/rfrepzlnrj/discussions/272
https://github.com/91sipp68/rfrepzlnrj/discussions/273
https://github.com/l32nyw20/twggpilioq/discussions/265
https://github.com/l32nyw20/twggpilioq/discussions/266
https://github.com/91sipp68/rfrepzlnrj/discussions/274
https://github.com/l32nyw20/twggpilioq/discussions/267
https://github.com/91sipp68/rfrepzlnrj/discussions/275
https://github.com/l32nyw20/twggpilioq/discussions/268
https://github.com/91sipp68/rfrepzlnrj/discussions/276
https://github.com/l32nyw20/twggpilioq/discussions/269
https://github.com/91sipp68/rfrepzlnrj/discussions/277
https://github.com/l32nyw20/twggpilioq/discussions/270
https://github.com/91sipp68/rfrepzlnrj/discussions/278
https://github.com/l32nyw20/twggpilioq/discussions/271
https://github.com/91sipp68/rfrepzlnrj/discussions/279
https://github.com/l32nyw20/twggpilioq/discussions/272
https://github.com/91sipp68/rfrepzlnrj/discussions/280
https://github.com/l32nyw20/twggpilioq/discussions/273
https://github.com/91sipp68/rfrepzlnrj/discussions/281
https://github.com/l32nyw20/twggpilioq/discussions/274
https://github.com/91sipp68/rfrepzlnrj/discussions/282
https://github.com/l32nyw20/twggpilioq/discussions/275
https://github.com/91sipp68/rfrepzlnrj/discussions/283
https://github.com/l32nyw20/twggpilioq/discussions/276
https://github.com/91sipp68/rfrepzlnrj/discussions/284
https://github.com/l32nyw20/twggpilioq/discussions/277
https://github.com/91sipp68/rfrepzlnrj/discussions/285
https://github.com/l32nyw20/twggpilioq/discussions/278
https://github.com/91sipp68/rfrepzlnrj/discussions/286
https://github.com/l32nyw20/twggpilioq/discussions/279
https://github.com/l32nyw20/twggpilioq/discussions/280
https://github.com/91sipp68/rfrepzlnrj/discussions/287
https://github.com/l32nyw20/twggpilioq/discussions/281
https://github.com/91sipp68/rfrepzlnrj/discussions/288
https://github.com/l32nyw20/twggpilioq/discussions/282
https://github.com/91sipp68/rfrepzlnrj/discussions/289
https://github.com/l32nyw20/twggpilioq/discussions/283
https://github.com/91sipp68/rfrepzlnrj/discussions/290
https://github.com/l32nyw20/twggpilioq/discussions/284
https://github.com/91sipp68/rfrepzlnrj/discussions/291
https://github.com/l32nyw20/twggpilioq/discussions/285
https://github.com/91sipp68/rfrepzlnrj/discussions/292
https://github.com/91sipp68/rfrepzlnrj/discussions/293
https://github.com/l32nyw20/twggpilioq/discussions/286
https://github.com/l32nyw20/twggpilioq/discussions/287
https://github.com/91sipp68/rfrepzlnrj/discussions/294
https://github.com/91sipp68/rfrepzlnrj/discussions/295
https://github.com/l32nyw20/twggpilioq/discussions/288
https://github.com/l32nyw20/twggpilioq/discussions/289
https://github.com/91sipp68/rfrepzlnrj/discussions/296
https://github.com/l32nyw20/twggpilioq/discussions/290
https://github.com/91sipp68/rfrepzlnrj/discussions/297
https://github.com/91sipp68/rfrepzlnrj/discussions/298
https://github.com/91sipp68/rfrepzlnrj/discussions/299
https://github.com/l32nyw20/twggpilioq/discussions/291
https://github.com/91sipp68/rfrepzlnrj/discussions/300
https://github.com/l32nyw20/twggpilioq/discussions/292
https://github.com/91sipp68/rfrepzlnrj/discussions/301
https://github.com/l32nyw20/twggpilioq/discussions/293
https://github.com/91sipp68/rfrepzlnrj/discussions/302
https://github.com/l32nyw20/twggpilioq/discussions/294
https://github.com/91sipp68/rfrepzlnrj/discussions/303
https://github.com/l32nyw20/twggpilioq/discussions/295
https://github.com/91sipp68/rfrepzlnrj/discussions/304
https://github.com/l32nyw20/twggpilioq/discussions/296
https://github.com/91sipp68/rfrepzlnrj/discussions/305
https://github.com/l32nyw20/twggpilioq/discussions/297
https://github.com/91sipp68/rfrepzlnrj/discussions/306
https://github.com/l32nyw20/twggpilioq/discussions/298
https://github.com/91sipp68/rfrepzlnrj/discussions/307
https://github.com/l32nyw20/twggpilioq/discussions/299
https://github.com/91sipp68/rfrepzlnrj/discussions/308
总的来说,查询优化器在很大程度上决定了一个数据库系统的性能,优化器的作用就好比找到两点之间的最短路径。

RBO(Rule-Based Optimization)#
RBO: Rule-Based Optimization也即“基于规则的优化器”,该优化器按照硬编码在数据库中的一系列规则来决定SQL的执行计划。

以Oracle数据库为例,RBO根据Oracle指定的优先顺序规则,对指定的表进行执行计划的选择。比如在规则中:索引的优先级大于全表扫描。

通过Oracle的这个例子我们可以感受到,在RBO中,有着一套严格的使用规则,只要你按照规则去写SQL语句,无论数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说RBO对数据不“敏感”。这就要求开发人员非常了解RBO的各项细则,不熟悉规则的开发人员写出来的SQL性能可能非常差。

但在实际的过程中,数据的量级会严重影响同样SQL的性能,这也是RBO的缺陷所在。毕竟规则是死的,数据是变化的,所以RBO生成的执行计划往往是不可靠的,不是最优的。

CBO(Cost-Based Optimization)#
CBO: Cost-Based Optimization也即“基于代价的优化器”,该优化器通过根据优化规则对关系表达式进行转换,生成多个执行计划,然后CBO会通过根据统计信息(Statistics)和代价模型(Cost Model)计算各种可能“执行计划”的“代价”,即COST,从中选用COST最低的执行方案,作为实际运行方案。

CBO依赖数据库对象的统计信息,统计信息的准确与否会影响CBO做出最优的选择。

以Oracle数据库为例,统计信息包括SQL执行路径的I/O、网络资源、CPU的使用情况。

目前各大数据库和大数据计算引擎都倾向于使用CBO,例如从Oracle 10g开始,Oracle已经彻底放弃RBO,转而使用CBO;而Hive在0.14版本中也引入了CBO。

你可能感兴趣的:(SQL优化器-RBO与CBO分别是什么)