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

建设工程合同司法解释2021台州网站排名优化价格

建设工程合同司法解释2021,台州网站排名优化价格,dw网页制作入门教程,山东省建筑住房和城乡建设厅网站1、问题背景 在MySQL数据库中,如果不满足最左匹配原则,索引会失效。那么在OceanBase数据库中: 是否有同样的问题?如果不满足最左匹配原则,如何走上索引? 创建测试表和联合索引: -- 创建测试…

1、问题背景

在MySQL数据库中,如果不满足最左匹配原则,索引会失效。那么在OceanBase数据库中:

  • 是否有同样的问题?
  • 如果不满足最左匹配原则,如何走上索引?

创建测试表和联合索引:

-- 创建测试表
CREATE TABLE tt (c1 INT,c2 INT,c3 INT
);
-- 添加联合索引
CREATE INDEX idx_tt ON tt(c2,c3);

2、模拟不同查询场景并查看执行计划

测试版本:oceanbase 4.2.1.3

2.1 满足最左匹配原则的查询

// 场景1 全字段匹配,符合索引前缀原则,可以使用索引
mysql> EXPLAIN BASIC SELECT * FROM tt  where  c2=1  and  c3=2;
+--------------------------------------------------------------------------+
| Query Plan                                                               |
+--------------------------------------------------------------------------+
| ===========================================================
|
| |ID|OPERATOR        |NAME      |
| --------------------------------
| |0 |TABLE RANGE SCAN|tt(idx_tt)|
| ===========================================================
|
| Outputs & filters:
| -------------------------------------
|   0 - output([tt.c1], [tt.c2], [tt.c3]), filter(nil), rowset=16
|       access([tt.__pk_increment], [tt.c2], [tt.c3], [tt.c1]), partitions(p0)
|       is_index_back=true, is_global_index=false,
|       range_key([tt.c2], [tt.c3], [tt.__pk_increment]), range(1,2,MIN ; 1,2,MAX),
|       range_cond([tt.c2 = 1], [tt.c3 = 2])
+--------------------------------------------------------------------------+
12 rows in set (0.00 sec)
// 场景2 过滤条件是c2,符合索引前缀原则,可以使用索引
mysql> EXPLAIN BASIC SELECT * FROM tt  where  c2=1;
+--------------------------------------------------------------------------+
| Query Plan                                                               |
+--------------------------------------------------------------------------+
| ===========================================================|
| |ID|OPERATOR        |NAME      |
| --------------------------------
| |0 |TABLE RANGE SCAN|tt(idx_tt)|
| ===========================================================|
| Outputs & filters:
| -------------------------------------
|   0 - output([tt.c1], [tt.c2], [tt.c3]), filter(nil), rowset=16
|       access([tt.__pk_increment], [tt.c2], [tt.c1], [tt.c3]), partitions(p0)
|       is_index_back=true, is_global_index=false,
|       range_key([tt.c2], [tt.c3], [tt.__pk_increment]), range(1,MIN,MIN ; 1,MAX,MAX),
|       range_cond([tt.c2 = 1])
+--------------------------------------------------------------------------+
12 rows in set (0.01 sec)

2.2 不满足最左匹配原则的查询

// 场景3 过滤条件是c3,不符合索引前缀原则,不能使用索引
mysql> EXPLAIN BASIC SELECT * FROM tt  where  c3=2;
+--------------------------------------------------------------------------+
| Query Plan                                                               |
+--------------------------------------------------------------------------+
| =================================================
| |ID|OPERATOR       |NAME|
| -------------------------
| |0 |TABLE FULL SCAN|tt  |
| =================================================
| Outputs & filters:
| -------------------------------------
|   0 - output([tt.c1], [tt.c2], [tt.c3]), filter([tt.c3 = 2]), rowset=16
|       access([tt.c3], [tt.c1], [tt.c2]), partitions(p0)
|       is_index_back=false, is_global_index=false, filter_before_index_back[false],
|       range_key([tt.__pk_increment]), range(MIN ; MAX)always true
+--------------------------------------------------------------------------+
11 rows in set (0.00 sec)

结论:OceanBase数据库同样需要遵循最左匹配原则。

3、优化思路

3.1 Index Skip Scan

在OceanBase数据库中,对于不满足最左匹配原则的场景,有相应的优化手段。OceanBase从4.1版本开始,支持Index Skip Scan的能力,可以通过Hint使用该能力,使不满足最左匹配原则的查询也能走上索引。

测试版本:oceanbase 4.2.1.3

// 场景4 使用Index Skip Scan能力
mysql> EXPLAIN BASIC SELECT /*+ index_ss(tt idx_tt) */ * FROM tt  where  c3=2;
+--------------------------------------------------------------------------+
| Query Plan                                                               |
+--------------------------------------------------------------------------+
| ==========================================================|
| |ID|OPERATOR       |NAME      |
| -------------------------------
| |0 |TABLE SKIP SCAN|tt(idx_tt)|
| ==========================================================|
| Outputs & filters:
| -------------------------------------
|   0 - output([tt.c1], [tt.c2], [tt.c3]), filter([tt.c3 = 2]), rowset=16
|       access([tt.__pk_increment], [tt.c3], [tt.c1], [tt.c2]), partitions(p0)
|       is_index_back=true, is_global_index=false, filter_before_index_back[true],
|       range_key([tt.c2], [tt.c3], [tt.__pk_increment]), range(MIN,MIN,MIN ; MAX,MAX,MAX)always true
|       prefix_columns_cnt = 1 , skip_scan_range(2,MIN ; 2,MAX)
+--------------------------------------------------------------------------+
12 rows in set (0.01 sec)

注意:index_ss是固定写法,不能修改。

可以看到,执行计划从TABLE RANGE SCAN变为TABLE SKIP SCANTABLE SKIP SCAN虽然属于范围扫描,但采用了一种更优化的扫描方式,能在不满足最左匹配的条件下利用索引。

如果希望通过index_ss这个Hint来使用Index Skip Scan进行优化,需要关注表中列的NDV(Number of Distinct Values,不同值的数量)。
从索引的实现原理上来说,当表中存在一个联合索引idx (c2, c3),并且查询条件是where c3 = ?c2列的NDV远小于c3列的NDV时,适合使用Index Skip Scan

3.2 Index Skip Scan 优化触发条件

  • 表上有收集过统计信息。
  • 查询条件中包含联合索引的后缀列,并且不是其他索引最左前缀。
  • 优化器比较 TABLE SKIP SCAN 和全表扫描的代价,发现 TABLE SKIP SCAN 代价更低

3.3 不同版本是否全表扫描,执行计划算子的差异

可以查看3.x版本执行计划中OPERATOR字段,对比4.x版本的区别:

测试版本:oceanbase 3.2.3.3

// 使用索引
MySQL [wms]> EXPLAIN BASIC SELECT * FROM tt  where  c2=1  and  c3=2\G;
*************************** 1. row ***************************
Query Plan:
================================================
|ID|OPERATOR  |NAME      |
--------------------------
|0 |TABLE SCAN|tt(idx_tt)|
================================================
Outputs & filters:
-------------------------------------0 - output([tt.c1], [tt.c2], [tt.c3]), filter(nil),access([tt.c2], [tt.c3], [tt.c1]), partitions(p0)
1 row in set (0.00 sec)
// 未使用索引
MySQL [wms]> EXPLAIN BASIC SELECT * FROM tt  where  c3=2\G;
*************************** 1. row ***************************
Query Plan:
================================================
|ID|OPERATOR  |NAME|
--------------------
|0 |TABLE SCAN|tt  |
================================================
Outputs & filters:
-------------------------------------0 - output([tt.c1], [tt.c2], [tt.c3]), filter([tt.c3 = 2]),access([tt.c3], [tt.c1], [tt.c2]), partitions(p0)
1 row in set (0.01 sec)

技术交流,联系作者:hwc007007。备注:CSDN社区交流


文章转载自:

http://SRNhl9mb.qzqfq.cn
http://SRbfNtQB.qzqfq.cn
http://bxbK9TGp.qzqfq.cn
http://v1ancJ3i.qzqfq.cn
http://xtWFmvz9.qzqfq.cn
http://wX37x6aS.qzqfq.cn
http://2jnWAfW9.qzqfq.cn
http://Q6bPEpT1.qzqfq.cn
http://uqzeMiGQ.qzqfq.cn
http://X8hTawVN.qzqfq.cn
http://rJ6WVA9s.qzqfq.cn
http://zbWnea27.qzqfq.cn
http://g4pUy2YW.qzqfq.cn
http://XgF2QufR.qzqfq.cn
http://P0ozRDt7.qzqfq.cn
http://J4D7FDHw.qzqfq.cn
http://k09qgnCT.qzqfq.cn
http://i2i1eRiL.qzqfq.cn
http://ZNFFnsng.qzqfq.cn
http://CZR8Gr6T.qzqfq.cn
http://Aa02uP9z.qzqfq.cn
http://L10llJRr.qzqfq.cn
http://aR7zByyx.qzqfq.cn
http://2GdVSrR0.qzqfq.cn
http://tPUzmGzX.qzqfq.cn
http://jF6of6at.qzqfq.cn
http://XdVc1XGw.qzqfq.cn
http://JfYWNatw.qzqfq.cn
http://q6w61gOM.qzqfq.cn
http://qutrb9B6.qzqfq.cn
http://www.dtcms.com/wzjs/640027.html

相关文章:

  • 论坛类网站设计手机app软件开发需要多少钱
  • 网站建站如何入手北京seowyhseo
  • 网站开发的套路wordpress页面多打开空白
  • 哈尔滨做网站费用贵州省民贸民品企业信息管理系统
  • wordpress 侧边栏轮播搜索引擎优化课程
  • 腾讯云可以做网站吗云畅网站建设
  • 东莞知名网站建设安徽省交通运输厅
  • wordpress建站 东莞wap浏览器安卓版
  • 城乡建设部网站察周圣进证件玉树州公司网站建设
  • 怎样优化网站 优帮云技术合同 网站开发
  • 在网上做设计赚钱的网站wordpress微信公众平台开发教程
  • 网站怎么做一级域名跳转公司营业执照注册
  • 网站源码调试网络营销策划是什么意思
  • 微商软件商城总站免费建网站可信吗
  • 外包网站会自己做原型吗做图片网站会被
  • 番禺区网站建设龙岩市网站建设
  • wordpress重写插件优化设计五年级上册语文答案
  • 在线建设房屋设计网站.net美食网站开发源代码
  • 湖南企业网站营销设计免费域名网站的
  • 做家政公司网站孟州网站建设
  • 影视自助建站建筑设计前景怎么样
  • 高端网站建设品牌wordpress页面菜单
  • 怎么免费创建自己的网站平台和创互联的网站是多少
  • 网站图片等比缩小网页布局设计的一般步骤
  • 山东济宁省建设厅官方网站教育培训机构十大排名
  • 网站需要的栏目和内容廊坊网站建站网站
  • 网站建设策划书选题游戏加盟
  • 电子图书网站开发的目的钉钉小程序开发工具
  • 怎么做自己的html网站简单的响应式网页实例
  • 滨海新区做网站电商详情页素材