[GIS] fix spatial index rebuild for partition table
This commit is contained in:
parent
4eaead26b5
commit
95ba872b56
@ -777,6 +777,8 @@ int ObDDLUtil::generate_spatial_index_column_names(const ObTableSchema &dest_tab
|
||||
if (OB_ISNULL(column_schema = dest_table_schema.get_column_schema(col_id))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("error unexpected, column schema must not be nullptr", K(ret));
|
||||
} else if (is_contain(select_column_ids, col_id)) {
|
||||
// do nothing
|
||||
} else if (OB_FAIL(insert_column_names.push_back(ObColumnNameInfo(column_schema->get_column_name_str(), false)))) {
|
||||
LOG_WARN("push back insert column name failed", K(ret));
|
||||
} else if (OB_FAIL(column_names.push_back(ObColumnNameInfo(column_schema->get_column_name_str(), false)))) {
|
||||
@ -902,12 +904,7 @@ int ObDDLUtil::generate_build_replica_sql(
|
||||
bool is_shadow_column = false;
|
||||
const int64_t real_parallelism = ObDDLUtil::get_real_parallelism(parallelism, false/*is mv refresh*/);
|
||||
// get dest table column names
|
||||
if (dest_table_schema->is_spatial_index()) {
|
||||
if (OB_FAIL(ObDDLUtil::generate_spatial_index_column_names(*dest_table_schema, *source_table_schema, insert_column_names,
|
||||
column_names, select_column_ids))) {
|
||||
LOG_WARN("generate spatial index column names failed", K(ret));
|
||||
}
|
||||
} else if (OB_FAIL(dest_table_schema->get_column_ids(column_ids))) {
|
||||
if (OB_FAIL(dest_table_schema->get_column_ids(column_ids))) {
|
||||
LOG_WARN("fail to get column ids", K(ret));
|
||||
} else {
|
||||
for (int64_t i = 0; OB_SUCC(ret) && i < column_ids.count(); ++i) {
|
||||
@ -1004,6 +1001,13 @@ int ObDDLUtil::generate_build_replica_sql(
|
||||
LOG_WARN("fail append extra column", K(ret));
|
||||
}
|
||||
|
||||
if (OB_SUCC(ret) && dest_table_schema->is_spatial_index()) {
|
||||
if (OB_FAIL(ObDDLUtil::generate_spatial_index_column_names(*dest_table_schema, *source_table_schema, insert_column_names,
|
||||
column_names, select_column_ids))) {
|
||||
LOG_WARN("generate spatial index column names failed", K(ret));
|
||||
}
|
||||
}
|
||||
|
||||
// get dest table rowkey columns
|
||||
if (OB_SUCC(ret)) {
|
||||
const ObRowkeyInfo &rowkey_info = dest_table_schema->get_rowkey_info();
|
||||
|
@ -790,7 +790,7 @@ int ObQueryRange::preliminary_extract_query_range(const ColumnIArray &range_colu
|
||||
// ignore the condition from which we can not extract query range
|
||||
} else if (cur_expr->has_flag(CNT_DYNAMIC_PARAM) &&
|
||||
OB_FALSE_IT(has_exec_param_ = true)) {
|
||||
} else if (is_contain_geo_filters()) {
|
||||
} else if (is_contain_geo_filters() && is_single_domain_op(cur_expr)) {
|
||||
// or connect with spatial filters for functional correctness
|
||||
has_geo_expr = true;
|
||||
if (OB_FAIL(add_or_item(geo_ranges, temp_result))) {
|
||||
|
@ -385,3 +385,199 @@ select /*+index(partition_t1 idx)*/ st_astext(g) from partition_t1 where st_inte
|
||||
st_astext(g)
|
||||
POINT(1 1)
|
||||
drop table partition_t1;
|
||||
create table ptgeom1(c1 int, g geometry not null srid 0, g1 geometry not null srid 0) partition by hash(c1) partitions 3;
|
||||
insert into ptgeom1 values (0, st_geomfromtext('point(1 1)'), st_geomfromtext('point(2 2)'));
|
||||
insert into ptgeom1 values (1, st_geomfromtext('point(1 0)'), st_geomfromtext('point(2 2)'));
|
||||
select st_astext(g) from ptgeom1 where st_intersects(g, st_geomfromtext('point(1 1)'));
|
||||
st_astext(g)
|
||||
POINT(1 1)
|
||||
create index pgidx1 on ptgeom1(g) local;
|
||||
explain select /*+index(ptgeom1 pgidx1)*/ st_astext(g) from ptgeom1 where st_intersects(g, st_geomfromtext('point(1 1)'));
|
||||
Query Plan
|
||||
====================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
--------------------------------------------------------------------
|
||||
|0 |PX COORDINATOR | |1 |420 |
|
||||
|1 |└─EXCHANGE OUT DISTR |:EX10000 |1 |420 |
|
||||
|2 | └─PX PARTITION ITERATOR| |1 |419 |
|
||||
|3 | └─TABLE FULL SCAN |ptgeom1(pgidx1)|1 |419 |
|
||||
====================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([INTERNAL_FUNCTION(st_astext(ptgeom1.g))]), filter(nil)
|
||||
1 - output([INTERNAL_FUNCTION(st_astext(ptgeom1.g))]), filter(nil)
|
||||
dop=1
|
||||
2 - output([ptgeom1.g]), filter(nil)
|
||||
force partition granule
|
||||
3 - output([ptgeom1.g]), filter([st_intersects(ptgeom1.g, st_geomfromtext('point(1 1)'))])
|
||||
access([ptgeom1.__pk_increment], [ptgeom1.g]), partitions(p[0-2])
|
||||
is_index_back=true, is_global_index=false, filter_before_indexback[false],
|
||||
range_key([ptgeom1.__cellid_17], [ptgeom1.__mbr_17], [ptgeom1.__pk_increment]), range(1152921504606846980,MIN,MIN ; 1152921504606846980,MAX,MAX),
|
||||
(1152921504606846992,MIN,MIN ; 1152921504606846992,MAX,MAX), (1152921504606847040,MIN,MIN ; 1152921504606847040,MAX,MAX), (1152921504606847232,MIN,MIN ;
|
||||
1152921504606847232,MAX,MAX), (1152921504606848000,MIN,MIN ; 1152921504606848000,MAX,MAX), (1152921504606851072,MIN,MIN ; 1152921504606851072,MAX,MAX),
|
||||
(1152921504606863360,MIN,MIN ; 1152921504606863360,MAX,MAX), (1152921504606912512,MIN,MIN ; 1152921504606912512,MAX,MAX), (1152921504607109120,MIN,MIN ;
|
||||
1152921504607109120,MAX,MAX), (1152921504607895552,MIN,MIN ; 1152921504607895552,MAX,MAX), (1152921504611041280,MIN,MIN ; 1152921504611041280,MAX,MAX),
|
||||
(1152921504623624192,MIN,MIN ; 1152921504623624192,MAX,MAX), (1152921504673955840,MIN,MIN ; 1152921504673955840,MAX,MAX), (1152921504875282432,MIN,MIN ;
|
||||
1152921504875282432,MAX,MAX), (1152921505680588800,MIN,MIN ; 1152921505680588800,MAX,MAX), (1152921508901814272,MIN,MIN ; 1152921508901814272,MAX,MAX),
|
||||
(1152921521786716160,MIN,MIN ; 1152921521786716160,MAX,MAX), (1152921573326323712,MIN,MIN ; 1152921573326323712,MAX,MAX), (1152921779484753920,MIN,MIN ;
|
||||
1152921779484753920,MAX,MAX), (1152922604118474752,MIN,MIN ; 1152922604118474752,MAX,MAX), (1152925902653358080,MIN,MIN ; 1152925902653358080,MAX,MAX),
|
||||
(1152939096792891392,MIN,MIN ; 1152939096792891392,MAX,MAX), (1152991873351024640,MIN,MIN ; 1152991873351024640,MAX,MAX), (1153202979583557632,MIN,MIN ;
|
||||
1153202979583557632,MAX,MAX), (1154047404513689600,MIN,MIN ; 1154047404513689600,MAX,MAX), (1157425104234217472,MIN,MIN ; 1157425104234217472,MAX,MAX),
|
||||
(1170935903116328960,MIN,MIN ; 1170935903116328960,MAX,MAX), (1224979098644774912,MIN,MIN ; 1224979098644774912,MAX,MAX), (1441151880758558720,MIN,MIN ;
|
||||
1441151880758558720,MAX,MAX), (1152921504606846976,MIN,MIN ; 1152921504606846976,MAX,MAX), (1152921504606846977,MIN,MIN ; 1152921504606846977,MAX,MAX)
|
||||
select /*+index(ptgeom1 pgidx1)*/ st_astext(g) from ptgeom1 where st_intersects(g, st_geomfromtext('point(1 1)'));
|
||||
st_astext(g)
|
||||
POINT(1 1)
|
||||
drop table ptgeom1;
|
||||
DROP TABLE IF EXISTS group_change_info;
|
||||
create table group_change_info(
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`geom` geometry NOT NULL /*!80003 SRID 0 */,
|
||||
`city_code` int(11) NOT NULL COMMENT '分区分表key',
|
||||
`change_status` varchar(32) NOT NULL COMMENT '变化状态: ● INIT 初始\n● PROCESSING 进入产线\n● SUCCESS 产线变更完成\n● MTL_NG 采集NG\n● DELETE 删除\n● INTERCEPT 已拦截\n● DIFF_NG 差分NG',
|
||||
`change_date` datetime NOT NULL COMMENT '变化时间,本来带的属性',
|
||||
PRIMARY KEY (`id`, `city_code`),
|
||||
SPATIAL KEY `idx_geom` (`geom`) BLOCK_SIZE 16384 LOCAL COMMENT '变化范围'
|
||||
) partition by list(city_code) (partition `p10` values in (10), partition `p20` values in (20));
|
||||
insert into group_change_info values(1, st_geomfromtext('point(1 1)', 0), 10, 'SUCCESS', '2023-06-07 00:00:00'),
|
||||
(2, st_geomfromtext('point(1 0)', 0), 10, 'SUCCESS', '2023-06-07 00:00:00'),
|
||||
(3, st_geomfromtext('point(1 1)', 0), 10, 'DELETE', '2023-06-07 00:00:00'),
|
||||
(4, st_geomfromtext('point(1 1)', 0), 20, 'SUCCESS', '2023-06-07 00:00:00'),
|
||||
(5, st_geomfromtext('point(1 1)', 0), 10, 'SUCCESS', '2023-06-06 00:00:00');
|
||||
explain select id, st_astext(geom) from group_change_info where st_intersects(geom, st_geomfromtext('point(1 1)', 0)) and city_code = 10
|
||||
and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG') and change_date != '2023-06-06 00:00:00';
|
||||
Query Plan
|
||||
======================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
----------------------------------------------------------------------
|
||||
|0 |TABLE FULL SCAN|group_change_info(idx_geom)|1 |156 |
|
||||
======================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([group_change_info.id], [st_astext(group_change_info.geom)]), filter([group_change_info.city_code = 10], [group_change_info.change_date !=
|
||||
INTERNAL_FUNCTION('2023-06-06 00:00:00', 116, 17)], [st_intersects(group_change_info.geom, st_geomfromtext('point(1 1)', 0))], [group_change_info.change_status
|
||||
IN ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')])
|
||||
access([group_change_info.id], [group_change_info.city_code], [group_change_info.geom], [group_change_info.change_status], [group_change_info.change_date]), partitions(p0)
|
||||
is_index_back=true, is_global_index=false, filter_before_indexback[true,false,false,false],
|
||||
range_key([group_change_info.__cellid_17], [group_change_info.__mbr_17], [group_change_info.id], [group_change_info.city_code]), range(1152921504606846980,
|
||||
MIN,MIN,MIN ; 1152921504606846980,MAX,MAX,MAX), (1152921504606846992,MIN,MIN,MIN ; 1152921504606846992,MAX,MAX,MAX), (1152921504606847040,MIN,MIN,MIN ;
|
||||
1152921504606847040,MAX,MAX,MAX), (1152921504606847232,MIN,MIN,MIN ; 1152921504606847232,MAX,MAX,MAX), (1152921504606848000,MIN,MIN,MIN ; 1152921504606848000,
|
||||
MAX,MAX,MAX), (1152921504606851072,MIN,MIN,MIN ; 1152921504606851072,MAX,MAX,MAX), (1152921504606863360,MIN,MIN,MIN ; 1152921504606863360,MAX,MAX,MAX),
|
||||
(1152921504606912512,MIN,MIN,MIN ; 1152921504606912512,MAX,MAX,MAX), (1152921504607109120,MIN,MIN,MIN ; 1152921504607109120,MAX,MAX,MAX), (1152921504607895552,
|
||||
MIN,MIN,MIN ; 1152921504607895552,MAX,MAX,MAX), (1152921504611041280,MIN,MIN,MIN ; 1152921504611041280,MAX,MAX,MAX), (1152921504623624192,MIN,MIN,MIN ;
|
||||
1152921504623624192,MAX,MAX,MAX), (1152921504673955840,MIN,MIN,MIN ; 1152921504673955840,MAX,MAX,MAX), (1152921504875282432,MIN,MIN,MIN ; 1152921504875282432,
|
||||
MAX,MAX,MAX), (1152921505680588800,MIN,MIN,MIN ; 1152921505680588800,MAX,MAX,MAX), (1152921508901814272,MIN,MIN,MIN ; 1152921508901814272,MAX,MAX,MAX),
|
||||
(1152921521786716160,MIN,MIN,MIN ; 1152921521786716160,MAX,MAX,MAX), (1152921573326323712,MIN,MIN,MIN ; 1152921573326323712,MAX,MAX,MAX), (1152921779484753920,
|
||||
MIN,MIN,MIN ; 1152921779484753920,MAX,MAX,MAX), (1152922604118474752,MIN,MIN,MIN ; 1152922604118474752,MAX,MAX,MAX), (1152925902653358080,MIN,MIN,MIN ;
|
||||
1152925902653358080,MAX,MAX,MAX), (1152939096792891392,MIN,MIN,MIN ; 1152939096792891392,MAX,MAX,MAX), (1152991873351024640,MIN,MIN,MIN ; 1152991873351024640,
|
||||
MAX,MAX,MAX), (1153202979583557632,MIN,MIN,MIN ; 1153202979583557632,MAX,MAX,MAX), (1154047404513689600,MIN,MIN,MIN ; 1154047404513689600,MAX,MAX,MAX),
|
||||
(1157425104234217472,MIN,MIN,MIN ; 1157425104234217472,MAX,MAX,MAX), (1170935903116328960,MIN,MIN,MIN ; 1170935903116328960,MAX,MAX,MAX), (1224979098644774912,
|
||||
MIN,MIN,MIN ; 1224979098644774912,MAX,MAX,MAX), (1441151880758558720,MIN,MIN,MIN ; 1441151880758558720,MAX,MAX,MAX), (1152921504606846976,MIN,MIN,MIN ;
|
||||
1152921504606846976,MAX,MAX,MAX), (1152921504606846977,MIN,MIN,MIN ; 1152921504606846977,MAX,MAX,MAX)
|
||||
select id, st_astext(geom) from group_change_info where st_intersects(geom, st_geomfromtext('point(1 1)', 0)) and city_code = 10
|
||||
and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG') and change_date != '2023-06-06 00:00:00';
|
||||
id st_astext(geom)
|
||||
1 POINT(1 1)
|
||||
explain select id, st_astext(geom) from group_change_info where city_code = 10 and st_intersects(geom, st_geomfromtext('point(1 1)', 0))
|
||||
and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG') and change_date != '2023-06-06 00:00:00';
|
||||
Query Plan
|
||||
======================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
----------------------------------------------------------------------
|
||||
|0 |TABLE FULL SCAN|group_change_info(idx_geom)|1 |137 |
|
||||
======================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([group_change_info.id], [st_astext(group_change_info.geom)]), filter([group_change_info.city_code = 10], [group_change_info.change_date !=
|
||||
INTERNAL_FUNCTION('2023-06-06 00:00:00', 116, 17)], [st_intersects(group_change_info.geom, st_geomfromtext('point(1 1)', 0))], [group_change_info.change_status
|
||||
IN ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')])
|
||||
access([group_change_info.id], [group_change_info.city_code], [group_change_info.geom], [group_change_info.change_status], [group_change_info.change_date]), partitions(p0)
|
||||
is_index_back=true, is_global_index=false, filter_before_indexback[true,false,false,false],
|
||||
range_key([group_change_info.__cellid_17], [group_change_info.__mbr_17], [group_change_info.id], [group_change_info.city_code]), range(1152921504606846980,
|
||||
MIN,MIN,MIN ; 1152921504606846980,MAX,MAX,MAX), (1152921504606846992,MIN,MIN,MIN ; 1152921504606846992,MAX,MAX,MAX), (1152921504606847040,MIN,MIN,MIN ;
|
||||
1152921504606847040,MAX,MAX,MAX), (1152921504606847232,MIN,MIN,MIN ; 1152921504606847232,MAX,MAX,MAX), (1152921504606848000,MIN,MIN,MIN ; 1152921504606848000,
|
||||
MAX,MAX,MAX), (1152921504606851072,MIN,MIN,MIN ; 1152921504606851072,MAX,MAX,MAX), (1152921504606863360,MIN,MIN,MIN ; 1152921504606863360,MAX,MAX,MAX),
|
||||
(1152921504606912512,MIN,MIN,MIN ; 1152921504606912512,MAX,MAX,MAX), (1152921504607109120,MIN,MIN,MIN ; 1152921504607109120,MAX,MAX,MAX), (1152921504607895552,
|
||||
MIN,MIN,MIN ; 1152921504607895552,MAX,MAX,MAX), (1152921504611041280,MIN,MIN,MIN ; 1152921504611041280,MAX,MAX,MAX), (1152921504623624192,MIN,MIN,MIN ;
|
||||
1152921504623624192,MAX,MAX,MAX), (1152921504673955840,MIN,MIN,MIN ; 1152921504673955840,MAX,MAX,MAX), (1152921504875282432,MIN,MIN,MIN ; 1152921504875282432,
|
||||
MAX,MAX,MAX), (1152921505680588800,MIN,MIN,MIN ; 1152921505680588800,MAX,MAX,MAX), (1152921508901814272,MIN,MIN,MIN ; 1152921508901814272,MAX,MAX,MAX),
|
||||
(1152921521786716160,MIN,MIN,MIN ; 1152921521786716160,MAX,MAX,MAX), (1152921573326323712,MIN,MIN,MIN ; 1152921573326323712,MAX,MAX,MAX), (1152921779484753920,
|
||||
MIN,MIN,MIN ; 1152921779484753920,MAX,MAX,MAX), (1152922604118474752,MIN,MIN,MIN ; 1152922604118474752,MAX,MAX,MAX), (1152925902653358080,MIN,MIN,MIN ;
|
||||
1152925902653358080,MAX,MAX,MAX), (1152939096792891392,MIN,MIN,MIN ; 1152939096792891392,MAX,MAX,MAX), (1152991873351024640,MIN,MIN,MIN ; 1152991873351024640,
|
||||
MAX,MAX,MAX), (1153202979583557632,MIN,MIN,MIN ; 1153202979583557632,MAX,MAX,MAX), (1154047404513689600,MIN,MIN,MIN ; 1154047404513689600,MAX,MAX,MAX),
|
||||
(1157425104234217472,MIN,MIN,MIN ; 1157425104234217472,MAX,MAX,MAX), (1170935903116328960,MIN,MIN,MIN ; 1170935903116328960,MAX,MAX,MAX), (1224979098644774912,
|
||||
MIN,MIN,MIN ; 1224979098644774912,MAX,MAX,MAX), (1441151880758558720,MIN,MIN,MIN ; 1441151880758558720,MAX,MAX,MAX), (1152921504606846976,MIN,MIN,MIN ;
|
||||
1152921504606846976,MAX,MAX,MAX), (1152921504606846977,MIN,MIN,MIN ; 1152921504606846977,MAX,MAX,MAX)
|
||||
select id, st_astext(geom) from group_change_info where city_code = 10 and st_intersects(geom, st_geomfromtext('point(1 1)', 0))
|
||||
and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG') and change_date != '2023-06-06 00:00:00';
|
||||
id st_astext(geom)
|
||||
1 POINT(1 1)
|
||||
explain select id, st_astext(geom) from group_change_info where city_code = 10 and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')
|
||||
and change_date != '2023-06-06 00:00:00' and st_intersects(geom, st_geomfromtext('point(1 1)', 0));
|
||||
Query Plan
|
||||
======================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
----------------------------------------------------------------------
|
||||
|0 |TABLE FULL SCAN|group_change_info(idx_geom)|1 |136 |
|
||||
======================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([group_change_info.id], [st_astext(group_change_info.geom)]), filter([group_change_info.city_code = 10], [group_change_info.change_date !=
|
||||
INTERNAL_FUNCTION('2023-06-06 00:00:00', 116, 17)], [st_intersects(group_change_info.geom, st_geomfromtext('point(1 1)', 0))], [group_change_info.change_status
|
||||
IN ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')])
|
||||
access([group_change_info.id], [group_change_info.city_code], [group_change_info.geom], [group_change_info.change_status], [group_change_info.change_date]), partitions(p0)
|
||||
is_index_back=true, is_global_index=false, filter_before_indexback[true,false,false,false],
|
||||
range_key([group_change_info.__cellid_17], [group_change_info.__mbr_17], [group_change_info.id], [group_change_info.city_code]), range(1152921504606846980,
|
||||
MIN,MIN,MIN ; 1152921504606846980,MAX,MAX,MAX), (1152921504606846992,MIN,MIN,MIN ; 1152921504606846992,MAX,MAX,MAX), (1152921504606847040,MIN,MIN,MIN ;
|
||||
1152921504606847040,MAX,MAX,MAX), (1152921504606847232,MIN,MIN,MIN ; 1152921504606847232,MAX,MAX,MAX), (1152921504606848000,MIN,MIN,MIN ; 1152921504606848000,
|
||||
MAX,MAX,MAX), (1152921504606851072,MIN,MIN,MIN ; 1152921504606851072,MAX,MAX,MAX), (1152921504606863360,MIN,MIN,MIN ; 1152921504606863360,MAX,MAX,MAX),
|
||||
(1152921504606912512,MIN,MIN,MIN ; 1152921504606912512,MAX,MAX,MAX), (1152921504607109120,MIN,MIN,MIN ; 1152921504607109120,MAX,MAX,MAX), (1152921504607895552,
|
||||
MIN,MIN,MIN ; 1152921504607895552,MAX,MAX,MAX), (1152921504611041280,MIN,MIN,MIN ; 1152921504611041280,MAX,MAX,MAX), (1152921504623624192,MIN,MIN,MIN ;
|
||||
1152921504623624192,MAX,MAX,MAX), (1152921504673955840,MIN,MIN,MIN ; 1152921504673955840,MAX,MAX,MAX), (1152921504875282432,MIN,MIN,MIN ; 1152921504875282432,
|
||||
MAX,MAX,MAX), (1152921505680588800,MIN,MIN,MIN ; 1152921505680588800,MAX,MAX,MAX), (1152921508901814272,MIN,MIN,MIN ; 1152921508901814272,MAX,MAX,MAX),
|
||||
(1152921521786716160,MIN,MIN,MIN ; 1152921521786716160,MAX,MAX,MAX), (1152921573326323712,MIN,MIN,MIN ; 1152921573326323712,MAX,MAX,MAX), (1152921779484753920,
|
||||
MIN,MIN,MIN ; 1152921779484753920,MAX,MAX,MAX), (1152922604118474752,MIN,MIN,MIN ; 1152922604118474752,MAX,MAX,MAX), (1152925902653358080,MIN,MIN,MIN ;
|
||||
1152925902653358080,MAX,MAX,MAX), (1152939096792891392,MIN,MIN,MIN ; 1152939096792891392,MAX,MAX,MAX), (1152991873351024640,MIN,MIN,MIN ; 1152991873351024640,
|
||||
MAX,MAX,MAX), (1153202979583557632,MIN,MIN,MIN ; 1153202979583557632,MAX,MAX,MAX), (1154047404513689600,MIN,MIN,MIN ; 1154047404513689600,MAX,MAX,MAX),
|
||||
(1157425104234217472,MIN,MIN,MIN ; 1157425104234217472,MAX,MAX,MAX), (1170935903116328960,MIN,MIN,MIN ; 1170935903116328960,MAX,MAX,MAX), (1224979098644774912,
|
||||
MIN,MIN,MIN ; 1224979098644774912,MAX,MAX,MAX), (1441151880758558720,MIN,MIN,MIN ; 1441151880758558720,MAX,MAX,MAX), (1152921504606846976,MIN,MIN,MIN ;
|
||||
1152921504606846976,MAX,MAX,MAX), (1152921504606846977,MIN,MIN,MIN ; 1152921504606846977,MAX,MAX,MAX)
|
||||
select id, st_astext(geom) from group_change_info where city_code = 10 and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')
|
||||
and change_date != '2023-06-06 00:00:00' and st_intersects(geom, st_geomfromtext('point(1 1)', 0));
|
||||
id st_astext(geom)
|
||||
1 POINT(1 1)
|
||||
explain select id, st_astext(geom) from group_change_info where city_code = 10 and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')
|
||||
and st_intersects(geom, st_geomfromtext('point(1 1)', 0)) and change_date != '2023-06-06 00:00:00';
|
||||
Query Plan
|
||||
======================================================================
|
||||
|ID|OPERATOR |NAME |EST.ROWS|EST.TIME(us)|
|
||||
----------------------------------------------------------------------
|
||||
|0 |TABLE FULL SCAN|group_change_info(idx_geom)|1 |136 |
|
||||
======================================================================
|
||||
Outputs & filters:
|
||||
-------------------------------------
|
||||
0 - output([group_change_info.id], [st_astext(group_change_info.geom)]), filter([group_change_info.city_code = 10], [group_change_info.change_date !=
|
||||
INTERNAL_FUNCTION('2023-06-06 00:00:00', 116, 17)], [st_intersects(group_change_info.geom, st_geomfromtext('point(1 1)', 0))], [group_change_info.change_status
|
||||
IN ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')])
|
||||
access([group_change_info.id], [group_change_info.city_code], [group_change_info.geom], [group_change_info.change_status], [group_change_info.change_date]), partitions(p0)
|
||||
is_index_back=true, is_global_index=false, filter_before_indexback[true,false,false,false],
|
||||
range_key([group_change_info.__cellid_17], [group_change_info.__mbr_17], [group_change_info.id], [group_change_info.city_code]), range(1152921504606846980,
|
||||
MIN,MIN,MIN ; 1152921504606846980,MAX,MAX,MAX), (1152921504606846992,MIN,MIN,MIN ; 1152921504606846992,MAX,MAX,MAX), (1152921504606847040,MIN,MIN,MIN ;
|
||||
1152921504606847040,MAX,MAX,MAX), (1152921504606847232,MIN,MIN,MIN ; 1152921504606847232,MAX,MAX,MAX), (1152921504606848000,MIN,MIN,MIN ; 1152921504606848000,
|
||||
MAX,MAX,MAX), (1152921504606851072,MIN,MIN,MIN ; 1152921504606851072,MAX,MAX,MAX), (1152921504606863360,MIN,MIN,MIN ; 1152921504606863360,MAX,MAX,MAX),
|
||||
(1152921504606912512,MIN,MIN,MIN ; 1152921504606912512,MAX,MAX,MAX), (1152921504607109120,MIN,MIN,MIN ; 1152921504607109120,MAX,MAX,MAX), (1152921504607895552,
|
||||
MIN,MIN,MIN ; 1152921504607895552,MAX,MAX,MAX), (1152921504611041280,MIN,MIN,MIN ; 1152921504611041280,MAX,MAX,MAX), (1152921504623624192,MIN,MIN,MIN ;
|
||||
1152921504623624192,MAX,MAX,MAX), (1152921504673955840,MIN,MIN,MIN ; 1152921504673955840,MAX,MAX,MAX), (1152921504875282432,MIN,MIN,MIN ; 1152921504875282432,
|
||||
MAX,MAX,MAX), (1152921505680588800,MIN,MIN,MIN ; 1152921505680588800,MAX,MAX,MAX), (1152921508901814272,MIN,MIN,MIN ; 1152921508901814272,MAX,MAX,MAX),
|
||||
(1152921521786716160,MIN,MIN,MIN ; 1152921521786716160,MAX,MAX,MAX), (1152921573326323712,MIN,MIN,MIN ; 1152921573326323712,MAX,MAX,MAX), (1152921779484753920,
|
||||
MIN,MIN,MIN ; 1152921779484753920,MAX,MAX,MAX), (1152922604118474752,MIN,MIN,MIN ; 1152922604118474752,MAX,MAX,MAX), (1152925902653358080,MIN,MIN,MIN ;
|
||||
1152925902653358080,MAX,MAX,MAX), (1152939096792891392,MIN,MIN,MIN ; 1152939096792891392,MAX,MAX,MAX), (1152991873351024640,MIN,MIN,MIN ; 1152991873351024640,
|
||||
MAX,MAX,MAX), (1153202979583557632,MIN,MIN,MIN ; 1153202979583557632,MAX,MAX,MAX), (1154047404513689600,MIN,MIN,MIN ; 1154047404513689600,MAX,MAX,MAX),
|
||||
(1157425104234217472,MIN,MIN,MIN ; 1157425104234217472,MAX,MAX,MAX), (1170935903116328960,MIN,MIN,MIN ; 1170935903116328960,MAX,MAX,MAX), (1224979098644774912,
|
||||
MIN,MIN,MIN ; 1224979098644774912,MAX,MAX,MAX), (1441151880758558720,MIN,MIN,MIN ; 1441151880758558720,MAX,MAX,MAX), (1152921504606846976,MIN,MIN,MIN ;
|
||||
1152921504606846976,MAX,MAX,MAX), (1152921504606846977,MIN,MIN,MIN ; 1152921504606846977,MAX,MAX,MAX)
|
||||
select id, st_astext(geom) from group_change_info where city_code = 10 and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')
|
||||
and st_intersects(geom, st_geomfromtext('point(1 1)', 0)) and change_date != '2023-06-06 00:00:00';
|
||||
id st_astext(geom)
|
||||
1 POINT(1 1)
|
||||
drop table group_change_info;
|
||||
|
@ -127,3 +127,58 @@ select /*+index(partition_t1 idx)*/ st_astext(g) from partition_t1 where st_inte
|
||||
create spatial index idx on partition_t1 (g) local;
|
||||
select /*+index(partition_t1 idx)*/ st_astext(g) from partition_t1 where st_intersects(g, st_geomfromtext('point(1 1)'));
|
||||
drop table partition_t1;
|
||||
|
||||
create table ptgeom1(c1 int, g geometry not null srid 0, g1 geometry not null srid 0) partition by hash(c1) partitions 3;
|
||||
insert into ptgeom1 values (0, st_geomfromtext('point(1 1)'), st_geomfromtext('point(2 2)'));
|
||||
insert into ptgeom1 values (1, st_geomfromtext('point(1 0)'), st_geomfromtext('point(2 2)'));
|
||||
select st_astext(g) from ptgeom1 where st_intersects(g, st_geomfromtext('point(1 1)'));
|
||||
create index pgidx1 on ptgeom1(g) local;
|
||||
explain select /*+index(ptgeom1 pgidx1)*/ st_astext(g) from ptgeom1 where st_intersects(g, st_geomfromtext('point(1 1)'));
|
||||
select /*+index(ptgeom1 pgidx1)*/ st_astext(g) from ptgeom1 where st_intersects(g, st_geomfromtext('point(1 1)'));
|
||||
drop table ptgeom1;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS group_change_info;
|
||||
--enable_warnings
|
||||
create table group_change_info(
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
|
||||
`geom` geometry NOT NULL /*!80003 SRID 0 */,
|
||||
`city_code` int(11) NOT NULL COMMENT '分区分表key',
|
||||
`change_status` varchar(32) NOT NULL COMMENT '变化状态: ● INIT 初始\n● PROCESSING 进入产线\n● SUCCESS 产线变更完成\n● MTL_NG 采集NG\n● DELETE 删除\n● INTERCEPT 已拦截\n● DIFF_NG 差分NG',
|
||||
`change_date` datetime NOT NULL COMMENT '变化时间,本来带的属性',
|
||||
PRIMARY KEY (`id`, `city_code`),
|
||||
SPATIAL KEY `idx_geom` (`geom`) BLOCK_SIZE 16384 LOCAL COMMENT '变化范围'
|
||||
) partition by list(city_code) (partition `p10` values in (10), partition `p20` values in (20));
|
||||
|
||||
insert into group_change_info values(1, st_geomfromtext('point(1 1)', 0), 10, 'SUCCESS', '2023-06-07 00:00:00'),
|
||||
(2, st_geomfromtext('point(1 0)', 0), 10, 'SUCCESS', '2023-06-07 00:00:00'),
|
||||
(3, st_geomfromtext('point(1 1)', 0), 10, 'DELETE', '2023-06-07 00:00:00'),
|
||||
(4, st_geomfromtext('point(1 1)', 0), 20, 'SUCCESS', '2023-06-07 00:00:00'),
|
||||
(5, st_geomfromtext('point(1 1)', 0), 10, 'SUCCESS', '2023-06-06 00:00:00');
|
||||
|
||||
explain select id, st_astext(geom) from group_change_info where st_intersects(geom, st_geomfromtext('point(1 1)', 0)) and city_code = 10
|
||||
and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG') and change_date != '2023-06-06 00:00:00';
|
||||
|
||||
select id, st_astext(geom) from group_change_info where st_intersects(geom, st_geomfromtext('point(1 1)', 0)) and city_code = 10
|
||||
and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG') and change_date != '2023-06-06 00:00:00';
|
||||
|
||||
explain select id, st_astext(geom) from group_change_info where city_code = 10 and st_intersects(geom, st_geomfromtext('point(1 1)', 0))
|
||||
and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG') and change_date != '2023-06-06 00:00:00';
|
||||
|
||||
select id, st_astext(geom) from group_change_info where city_code = 10 and st_intersects(geom, st_geomfromtext('point(1 1)', 0))
|
||||
and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG') and change_date != '2023-06-06 00:00:00';
|
||||
|
||||
explain select id, st_astext(geom) from group_change_info where city_code = 10 and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')
|
||||
and change_date != '2023-06-06 00:00:00' and st_intersects(geom, st_geomfromtext('point(1 1)', 0));
|
||||
|
||||
select id, st_astext(geom) from group_change_info where city_code = 10 and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')
|
||||
and change_date != '2023-06-06 00:00:00' and st_intersects(geom, st_geomfromtext('point(1 1)', 0));
|
||||
|
||||
explain select id, st_astext(geom) from group_change_info where city_code = 10 and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')
|
||||
and st_intersects(geom, st_geomfromtext('point(1 1)', 0)) and change_date != '2023-06-06 00:00:00';
|
||||
|
||||
select id, st_astext(geom) from group_change_info where city_code = 10 and change_status in ('INIT', 'PROCESSING', 'SUCCESS', 'DIFF_NG')
|
||||
and st_intersects(geom, st_geomfromtext('point(1 1)', 0)) and change_date != '2023-06-06 00:00:00';
|
||||
|
||||
|
||||
drop table group_change_info;
|
||||
|
Loading…
x
Reference in New Issue
Block a user