Oracle中常见的Hint(一)
|
1
2
3
|
select /*+ all_rows */ empno,ename,sal,job from emp where empno=7396; |
|
1
2
3
4
5
|
scott@TEST>show parameter optimizer_modeNAME
TYPE
VALUE------------------------------------ --------------------------------- ------------------------------optimizer_mode
string ALL_ROWS |
|
1
2
3
|
select /*+ first_rows(10) */ empno,ename,sal,job from emp where deptno=30; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
scott@TEST>alter session set optimizer_mode=first_rows_9;ERROR:ORA-00096: invalid value FIRST_ROWS_9 for parameter optimizer_mode, must be from among first_rows_1000, first_rows_100, first_rows_10, first_rows_1, first_rows, all_rows, choose,rulescott@TEST>set autotrace traceonlyscott@TEST>select /*+ first_rows(9) */ empno from emp;14 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 179099197---------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time
|---------------------------------------------------------------------------| 0 | SELECT STATEMENT |
| 9 | 36 | 1 (0)| 00:00:01 || 1 | INDEX FULL SCAN | PK_EMP |
9 | 36 | 1 (0)| 00:00:01 |--------------------------------------------------------------------------- |
-
集合运算(如UNION,INTERSACT,MINUS,UNION ALL等)
-
GROUP BY
-
FOR UPDATE
-
聚合函数(比如SUM等)
-
DISTINCT
-
ORDER BY(对应的排序列上没有索引)
|
1
2
3
|
select /*+ rule */ empno,ename,sal,job from emp where deptno=30; |
-
目标SQL除RULE之外还联合使用了其他Hint(如DRIVING_SITE)。
-
目标SQL使用了并行执行
-
目标SQL所涉及的对象有IOT
-
目标SQL所涉及的对象有分区表
|
1
2
3
|
select /*+ full(emp) */ empno,ename,sal,job from emp where deptno=30; |
|
1
2
3
|
select /*+ rowid(emp) */ empno,ename,sal,job from emp where rowid='AAAR3xAAEAAAACXAAA'; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
select /*+ index(emp pk_emp) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; select /*+ index(emp pk_emp idx_emp_mgr idx_emp_dept) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; select /*+ index(emp (empno) (mgr) (deptno)) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; select /*+ index */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; |
|
1
2
3
4
5
6
7
8
9
10
11
|
select /*+ no_index(emp pk_emp) */ empno,ename,sal,job from empwhere empno=7369 and mgr=7902 and deptno=20; select /*+ no_index(emp pk_emp idx_emp_mgr idx_emp_dept) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; select /*+ no_index */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; |
|
1
2
3
4
5
6
7
8
9
10
11
|
select /*+ index_desc(emp pk_emp) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; select /*+ index_desc(emp pk_emp idx_emp_mgr idx_emp_dept) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; select /*+ index_desc */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
scott@TEST>select /*+ index_desc(emp,pk_emp) */ empno from emp; EMPNO---------- 7934 7902 7900 7876 7844 7839 7788 7782 7698 7654 7566 7521 7499 736914 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 1838043032-------------------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
| | 10 | 40 | 1 (0)| 00:00:01 || 1 | INDEX FULL SCAN DESCENDING| PK_EMP |
10 | 40 | 1 (0)| 00:00:01 |-------------------------------------------------------------------------------------...... |
|
1
2
3
4
5
6
7
8
9
10
11
|
select /*+ index_combine(emp pk_emp idx_emp_mgr) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 ; select /*+ index_combine(emp pk_emp idx_emp_mgr idx_emp_deptno) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; select /*+ index_combine(emp) */ empno,ename,sal,job from emp where empno=7369 and mgr=7902 and deptno=20; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
scott@TEST>create index idx_emp_mgr on emp(mgr);Index created.scott@TEST>create index idx_emp_dept on emp(deptno);Index created.scott@TEST>select /*+ index_combine(emp pk_emp idx_emp_mgr idx_emp_deptno) */ empno,ename,sal,job 2 from emp 3 where empno=7369 and mgr=7902 and deptno=20; EMPNO ENAME
SAL JOB---------- ------------------------------ ---------- --------------------------- 7369 SMITH
800 CLERKExecution Plan----------------------------------------------------------Plan hash value: 1816402415-------------------------------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
| | 1 | 29 | 2 (0)| 00:00:01 || 1 | TABLE ACCESS BY INDEX ROWID
| EMP | 1 | 29 | 2 (0)| 00:00:01 || 2 | BITMAP CONVERSION TO ROWIDS
| | | | | || 3 | BITMAP AND
|
| | | | || 4 | BITMAP CONVERSION FROM ROWIDS|
| | | | ||* 5 | INDEX RANGE SCAN
| PK_EMP | | | 0 (0)| 00:00:01 || 6 | BITMAP CONVERSION FROM ROWIDS|
| | | | ||* 7 | INDEX RANGE SCAN
| IDX_EMP_MGR | | | 1 (0)| 00:00:01 || 8 | BITMAP CONVERSION FROM ROWIDS|
| | | | ||* 9 | INDEX RANGE SCAN
| IDX_EMP_DEPT | | | 1 (0)| 00:00:01 |-------------------------------------------------------------------------------------------------...... |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
scott@TEST>alter session set "_b_tree_bitmap_plans"=false;Session altered.scott@TEST>select /*+ index_combine(emp pk_emp idx_emp_mgr idx_emp_deptno) */ empno,ename,sal,job 2 from emp 3 where empno=7369 and mgr=7902 and deptno=20; EMPNO ENAME
SAL JOB---------- ------------------------------ ---------- --------------------------- 7369 SMITH
800 CLERKExecution Plan----------------------------------------------------------Plan hash value: 2949544139--------------------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
| | 1 | 29 | 1 (0)| 00:00:01 ||* 1 | TABLE ACCESS BY INDEX ROWID| EMP |
1 | 29 | 1 (0)| 00:00:01 ||* 2 | INDEX UNIQUE SCAN
| PK_EMP | 1 | | 0 (0)| 00:00:01 |--------------------------------------------------------------------------------------...... |
|
1
2
3
4
5
6
7
8
9
10
11
|
select /*+ index_ffs(emp pk_emp) */ empno from emp;select /*+ index_ffs(emp idx_emp_1 idx_emp_2) */ empno from emp where mgr=7902 and deptno=20;--create index idx_emp_1 on emp(mgr,deptno,1);--create index idx_emp_2 on emp(mgr,deptno,2);select /*+ index_ffs(emp) */ empno from emp; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
scott@TEST>select empno from emp;14 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 179099197---------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time
|---------------------------------------------------------------------------| 0 | SELECT STATEMENT |
| 10 | 40 | 1 (0)| 00:00:01 || 1 | INDEX FULL SCAN | PK_EMP | 10 | 40 |
1 (0)| 00:00:01 |---------------------------------------------------------------------------......scott@TEST>select /*+ index_ffs(emp) */empno from emp;14 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 366039554-------------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------------| 0 | SELECT STATEMENT |
| 10 | 40 | 2 (0)| 00:00:01 || 1 | INDEX FAST FULL SCAN| PK_EMP | 10 | 40 | 2
(0)| 00:00:01 |-------------------------------------------------------------------------------...... |
|
1
2
3
4
5
6
7
|
select /*+ index_join(emp pk_emp idx_emp_mgr) */ empno,mgr from emp where empno>7369 and mgr<7902; select /*+ index_join(emp) */ empno,mgr from emp where empno>7369 and mgr<7902; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
scott@TEST>select empno,mgr 2 from emp 3 where empno>7369 and mgr<7902;12 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 2059184959-------------------------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
| | 10 | 80 | 2 (0)| 00:00:01 ||* 1 | TABLE ACCESS BY INDEX ROWID| EMP
| 10 | 80 | 2 (0)| 00:00:01 ||* 2 | INDEX RANGE SCAN
| IDX_EMP_MGR | 11 | | 1 (0)| 00:00:01 |-------------------------------------------------------------------------------------------......scott@TEST>select /*+ index_join(emp) */ empno,mgr 2 from emp 3 where empno>7369 and mgr<7902;12 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 3030719951---------------------------------------------------------------------------------------| Id | Operation
| Name
| Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------------------| 0 | SELECT STATEMENT |
| 10 | 80 | 3 (34)| 00:00:01 ||* 1 | VIEW
| index$_join$_001 | 10 | 80 | 3 (34)| 00:00:01 ||* 2 | HASH JOIN
|
| | | | ||* 3 | INDEX RANGE SCAN| IDX_EMP_MGR | 10 | 80 | 2 (50)| 00:00:01 ||* 4 | INDEX RANGE SCAN| PK_EMP
| 10 | 80 | 2 (50)| 00:00:01 |---------------------------------------------------------------------------------------...... |
|
1
2
3
|
select /*+ and_equal(emp idx_emp_mgr idx_emp_dept) */ empno,mgr from emp where deptno=20 and mgr=7902; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
scott@TEST>select empno,mgr 2 from emp 3 where deptno=20 and mgr=7902;Execution Plan----------------------------------------------------------Plan hash value: 2059184959-------------------------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time |-------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
| | 1 | 11 | 2 (0)| 00:00:01 ||* 1 | TABLE ACCESS BY INDEX ROWID| EMP
| 1 | 11 | 2 (0)| 00:00:01 ||* 2 | INDEX RANGE SCAN
| IDX_EMP_MGR | 2 | | 1 (0)| 00:00:01 |-------------------------------------------------------------------------------------------......scott@TEST>select /*+ and_equal(emp idx_emp_mgr idx_emp_dept) */ empno,mgr 2 from emp 3 where deptno=20 and mgr=7902;Execution Plan----------------------------------------------------------Plan hash value: 3295440569--------------------------------------------------------------------------------------------| Id | Operation
| Name | Rows | Bytes | Cost (%CPU)| Time
|--------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT
| | 1 | 11 | 3 (0)| 00:00:01 ||* 1 | TABLE ACCESS BY INDEX ROWID| EMP
| 1 | 11 | 3 (0)| 00:00:01 || 2 | AND-EQUAL
| | | | | ||* 3 | INDEX RANGE SCAN
| IDX_EMP_MGR | 2 | | 1 (0)| 00:00:01 ||* 4 | INDEX RANGE SCAN
| IDX_EMP_DEPT | 5 | | 1 (0)| 00:00:01 |--------------------------------------------------------------------------------------------...... |
|
1
2
3
4
5
6
|
select /*+ ordered */ e.ename,j.job,e.sal,d.deptno from emp e,jobs j,dept d where e.empno=j.empno and e.deptno=d.deptno and d.loc='CHICAGO' order by e.ename; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
scott@TEST>select e.ename,j.job,e.sal,d.deptno 2 from emp e,jobs j,dept d 3 where e.empno=j.empno 4 and e.deptno=d.deptno 5 and d.loc='CHICAGO' 6 order by e.ename;6 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 4113290228-----------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-----------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 5 | 235 | 9 (23)| 00:00:01 || 1 | SORT ORDER BY | | 5 | 235 | 9 (23)| 00:00:01 ||* 2 | HASH JOIN | | 5 | 235 | 8 (13)| 00:00:01 || 3 | NESTED LOOPS | | | | | || 4 | NESTED LOOPS | | 5 | 140 | 4 (0)| 00:00:01 ||* 5 | TABLE ACCESS FULL | DEPT | 1 | 11 | 3 (0)| 00:00:01 ||* 6 | INDEX RANGE SCAN | IDX_EMP_DEPT | 5 | | 0 (0)| 00:00:01 || 7 | TABLE ACCESS BY INDEX ROWID| EMP | 5 | 85 | 1 (0)| 00:00:01 || 8 | TABLE ACCESS FULL | JOBS | 14 | 266 | 3 (0)| 00:00:01 |-----------------------------------------------------------------------------------------------......scott@TEST>select /*+ ordered */ e.ename,j.job,e.sal,d.deptno 2 from emp e,jobs j,dept d 3 where e.empno=j.empno 4 and e.deptno=d.deptno 5 and d.loc='CHICAGO' 6 order by e.ename;6 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 3031293267-----------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-----------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 5 | 235 | 11 (28)| 00:00:01 || 1 | SORT ORDER BY | | 5 | 235 | 11 (28)| 00:00:01 ||* 2 | HASH JOIN | | 5 | 235 | 10 (20)| 00:00:01 || 3 | MERGE JOIN | | 14 | 504 | 6 (17)| 00:00:01 || 4 | TABLE ACCESS BY INDEX ROWID| EMP | 14 | 238 | 2 (0)| 00:00:01 || 5 | INDEX FULL SCAN | PK_EMP | 14 | | 1 (0)| 00:00:01 ||* 6 | SORT JOIN | | 14 | 266 | 4 (25)| 00:00:01 || 7 | TABLE ACCESS FULL | JOBS | 14 | 266 | 3 (0)| 00:00:01 ||* 8 | TABLE ACCESS FULL | DEPT | 1 | 11 | 3 (0)| 00:00:01 |-----------------------------------------------------------------------------------------......scott@TEST>select /*+ ordered */ e.ename,j.job,e.sal,d.deptno 2 from emp e,dept d,jobs j 3 where e.empno=j.empno 4 and e.deptno=d.deptno 5 and d.loc='CHICAGO' 6 order by e.ename;6 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 1175157407-----------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-----------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 5 | 235 | 11 (28)| 00:00:01 || 1 | SORT ORDER BY | | 5 | 235 | 11 (28)| 00:00:01 ||* 2 | HASH JOIN | | 5 | 235 | 10 (20)| 00:00:01 || 3 | MERGE JOIN | | 5 | 140 | 6 (17)| 00:00:01 || 4 | TABLE ACCESS BY INDEX ROWID| EMP | 14 | 238 | 2 (0)| 00:00:01 || 5 | INDEX FULL SCAN | IDX_EMP_DEPT | 14 | | 1 (0)| 00:00:01 ||* 6 | SORT JOIN | | 1 | 11 | 4 (25)| 00:00:01 ||* 7 | TABLE ACCESS FULL | DEPT | 1 | 11 | 3 (0)| 00:00:01 || 8 | TABLE ACCESS FULL | JOBS | 14 | 266 | 3 (0)| 00:00:01 |-----------------------------------------------------------------------------------------------...... |
|
1
2
3
4
5
6
7
|
select /*+ leading(t e) */ e.ename,j.job,e.sal,d.deptno from emp e,jobs j,dept d,emp_temp t where e.empno=j.empno and e.deptno=d.deptno and d.loc='CHICAGO' and e.ename=t.ename order by e.ename; |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
--不使用Hintscott@TEST>select e.ename,j.job,e.sal,d.deptno 2 from emp e,jobs j,dept d,emp_temp t 3 where e.empno=j.empno 4 and e.deptno=d.deptno 5 and d.loc='CHICAGO' 6 and e.ename=t.ename 7 order by e.ename;6 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 558051962------------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |------------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 5 | 270 | 12 (17)| 00:00:01 || 1 | SORT ORDER BY | | 5 | 270 | 12 (17)| 00:00:01 ||* 2 | HASH JOIN | | 5 | 270 | 11 (10)| 00:00:01 ||* 3 | HASH JOIN | | 5 | 235 | 8 (13)| 00:00:01 || 4 | NESTED LOOPS | | | | | || 5 | NESTED LOOPS | | 5 | 140 | 4 (0)| 00:00:01 ||* 6 | TABLE ACCESS FULL | DEPT | 1 | 11 | 3 (0)| 00:00:01 ||* 7 | INDEX RANGE SCAN | IDX_EMP_DEPT | 5 | | 0 (0)| 00:00:01 || 8 | TABLE ACCESS BY INDEX ROWID| EMP | 5 | 85 | 1 (0)| 00:00:01 || 9 | TABLE ACCESS FULL | JOBS | 14 | 266 | 3 (0)| 00:00:01 || 10 | TABLE ACCESS FULL | EMP_TEMP | 14 | 98 | 3 (0)| 00:00:01 |------------------------------------------------------------------------------------------------......--使用LEADING Hintscott@TEST>select /*+ leading(t e) */ e.ename,j.job,e.sal,d.deptno 2 from emp e,jobs j,dept d,emp_temp t 3 where e.empno=j.empno 4 and e.deptno=d.deptno 5 and d.loc='CHICAGO' 6 and e.ename=t.ename 7 order by e.ename;6 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 937897748----------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |----------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 5 | 270 | 15 (20)| 00:00:01 || 1 | SORT ORDER BY | | 5 | 270 | 15 (20)| 00:00:01 ||* 2 | HASH JOIN | | 5 | 270 | 14 (15)| 00:00:01 ||* 3 | HASH JOIN | | 5 | 175 | 10 (10)| 00:00:01 ||* 4 | HASH JOIN | | 14 | 336 | 7 (15)| 00:00:01 || 5 | TABLE ACCESS FULL| EMP_TEMP | 14 | 98 | 3 (0)| 00:00:01 || 6 | TABLE ACCESS FULL| EMP | 14 | 238 | 3 (0)| 00:00:01 ||* 7 | TABLE ACCESS FULL | DEPT | 1 | 11 | 3 (0)| 00:00:01 || 8 | TABLE ACCESS FULL | JOBS | 14 | 266 | 3 (0)| 00:00:01 |----------------------------------------------------------------------------------......--使用Ordered Hintscott@TEST>select /*+ ordered */ e.ename,j.job,e.sal,d.deptno 2 from emp e,jobs j,dept d,emp_temp t 3 where e.empno=j.empno 4 and e.deptno=d.deptno 5 and d.loc='CHICAGO' 6 and e.ename=t.ename 7 order by e.ename;6 rows selected.Execution Plan----------------------------------------------------------Plan hash value: 2459794491--------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |--------------------------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 5 | 270 | 14 (22)| 00:00:01 || 1 | SORT ORDER BY | | 5 | 270 | 14 (22)| 00:00:01 ||* 2 | HASH JOIN | | 5 | 270 | 13 (16)| 00:00:01 ||* 3 | HASH JOIN | | 5 | 235 | 10 (20)| 00:00:01 || 4 | MERGE JOIN | | 14 | 504 | 6 (17)| 00:00:01 || 5 | TABLE ACCESS BY INDEX ROWID| EMP | 14 | 238 | 2 (0)| 00:00:01 || 6 | INDEX FULL SCAN | PK_EMP | 14 | | 1 (0)| 00:00:01 ||* 7 | SORT JOIN | | 14 | 266 | 4 (25)| 00:00:01 || 8 | TABLE ACCESS FULL | JOBS | 14 | 266 | 3 (0)| 00:00:01 ||* 9 | TABLE ACCESS FULL | DEPT | 1 | 11 | 3 (0)| 00:00:01 || 10 | TABLE ACCESS FULL | EMP_TEMP | 14 | 98 | 3 (0)| 00:00:01 |--------------------------------------------------------------------------------------------...... |

浙公网安备 33010602011771号