很多人都会为如何创建索引发愁, 在什么情况下需要创建索引? 对哪些字段创建索引? 创建什么索引?
下面就是对应的答案, 来自Oracle perf tunning guide.
Choosing Columns and Expressions to Index
A key is a column or expression on which you can build an index. Follow these guidelines for choosing keys to index:
- Consider indexing keys that are used frequently in
WHERE
clauses. - Consider indexing keys that are used frequently to join tables in SQL statements. For more information on optimizing joins, see the section "Using Hash Clusters".
- Index keys that have high selectivity. The selectivity of an index is the percentage of rows in a table having the same value for the indexed key. An index's selectivity is optimal if few rows have the same value.
Note:Oracle automatically creates indexes, or uses existing indexes, on the keys and expressions of unique and primary keys that you define with integrity constraints.
Indexing low selectivity columns can be helpful if the data distribution is skewed so that one or two values occur much less often than other values.
- Do not use standard B-tree indexes on keys or expressions with few distinct values. Such keys or expressions usually have poor selectivity and therefore do not optimize performance unless the frequently selected key values appear less frequently than the other key values. You can use bitmap indexes effectively in such cases, unless a high concurrency OLTP application is involved where the index is modified frequently.
- Do not index columns that are modified frequently.
UPDATE
statements that modify indexed columns andINSERT
andDELETE
statements that modify indexed tables take longer than if there were no index. Such SQL statements must modify data in indexes as well as data in tables. They also generate additional undo and redo. - Do not index keys that appear only in
WHERE
clauses with functions or operators. AWHERE
clause that uses a function, other thanMIN
orMAX
, or an operator with an indexed key does not make available the access path that uses the index except with function-based indexes. - Consider indexing foreign keys of referential integrity constraints in cases in which a large number of concurrent
INSERT
,UPDATE
, andDELETE
statements access the parent and child tables. Such an index allowsUPDATE
s andDELETE
s on the parent table without share locking the child table. - When choosing to index a key, consider whether the performance gain for queries is worth the performance loss for
INSERT
s,UPDATE
s, andDELETE
s and the use of the space required to store the index. You might want to experiment by comparing the processing times of the SQL statements with and without indexes. You can measure processing time with the SQL trace facility.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/94317/viewspace-796600/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/94317/viewspace-796600/