使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
2008-04-26 21:20
453 查看
使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
在oracle中,我们经常以为建立了索引,sql查询的时候就会如我们所希望的那样使用索引,事实上,oracle只会在一定条件下使用索引,这里我们总结数第一点:oracle会在条件中包含了前导列时使用索引,即查询条件中必须使用索引中的第一个列,请看下面的例子
SQL>select*fromtab;
TNAME TABTYPE CLUSTERID
-----------------------------------------------
BONUS TABLE
DEPT TABLE
DUMMY TABLE
EMP TABLE
SALGRADE TABLE
建立一个联合索引(注意复合索引的索引列顺序)
SQL>createindexemp_id1onemp(empno,ename,deptno);
Indexcreated
建立一个单键索引
SQL>createindexemp_id2onemp(sal);
Indexcreated
SQL>selecttable_name,index_namefromuser_indexes
2 wheretable_name='EMP';
TABLE_NAME INDEX_NAME
------------------------------------------------------------
EMP EMP_ID1
EMP EMP_ID2
SQL>SELECT*FROMUSER_IND_COLUMNS
2 /
INDEX_NAME TABLE_NAME COLUMN_NAME COLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCEND
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1
在oracle中,我们经常以为建立了索引,sql查询的时候就会如我们所希望的那样使用索引,事实上,oracle只会在一定条件下使用索引,这里我们总结数第一点:oracle会在条件中包含了前导列时使用索引,即查询条件中必须使用索引中的第一个列,请看下面的例子
SQL>select*fromtab;
TNAME TABTYPE CLUSTERID
-----------------------------------------------
BONUS TABLE
DEPT TABLE
DUMMY TABLE
EMP TABLE
SALGRADE TABLE
建立一个联合索引(注意复合索引的索引列顺序)
SQL>createindexemp_id1onemp(empno,ename,deptno);
Indexcreated
建立一个单键索引
SQL>createindexemp_id2onemp(sal);
Indexcreated
SQL>selecttable_name,index_namefromuser_indexes
2 wheretable_name='EMP';
TABLE_NAME INDEX_NAME
------------------------------------------------------------
EMP EMP_ID1
EMP EMP_ID2
SQL>SELECT*FROMUSER_IND_COLUMNS
2 /
INDEX_NAME TABLE_NAME COLUMN_NAME COLUMN_POSITIONCOLUMN_LENGTHCHAR_LENGTHDESCEND
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------1
相关文章推荐
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引——oracle
- 使用索引的误区之一:没有使用复合索引的前导列导致查询不使用索引
- 使用索引的误区之二:使用了 和 != 操作符,导致查询不使用索引
- 使用索引的误区之二:使用了 和 != 操作符,导致查询不使用索引
- 使用索引的误区之二:使用了 和 != 操作符,导致查询不使用索引
- 使用索引的误区之二:使用了和!=操作符,导致查询不使用索引
- 使用索引的误区之二:使用了 和 != 操作符,导致查询不使用索引
- Mysql多个LEFT JOIN使用ORDER BY不能使用索引导致查询过慢的解决方案
- oracle使用了索引但是查询性能没有改善(oracle的索引陷阱)
- 注意使用 BTREE 复合索引各字段的 ASC/DESC 以优化 order by 查询效率
- Mysql多个LEFT JOIN使用ORDER不能使用索引导致查询过慢的解决方案
- 在标准MySQL 5.6上查询没有使用过的索引的SQL
- 注意使用 BTREE 复合索引各字段的 ASC/DESC 以优化 order by 查询效率
- PosgreSQL 索引 COLLATE 设置不当导致查询优化无法使用索引
- oracle在组合索引上,只使用部分列进行查询(查询时必须包含前导列,否则会走全表扫描)
- oracle使用了索引但是查询性能没有改善(oracle的索引陷阱)
- 注意使用 BTREE 复合索引各字段的 ASC/DESC 以优化 order by 查询效率