Oracle 查询缺失的索引
时间: 2023-07-06 14:07:47 浏览: 110
要查询缺失的索引,可以使用以下 SQL 查询:
```sql
SELECT DISTINCT
t.table_name,
c.column_name,
'CREATE INDEX idx_' || t.table_name || '_' || c.column_name || ' ON ' || t.table_name || '(' || c.column_name || ');' AS create_index_query
FROM user_tables t
JOIN user_tab_cols c ON (t.table_name = c.table_name)
LEFT JOIN user_ind_columns i ON (t.table_name = i.table_name AND c.column_name = i.column_name)
WHERE i.column_name IS NULL;
```
这个查询会返回所有缺少索引的表及其列名,并生成一个 CREATE INDEX 语句,以便你可以直接复制和粘贴来创建索引。
相关问题
oracle查询缺失的索引
查询缺失的索引可以使用以下 SQL 语句:
```
SELECT DISTINCT t.table_name
FROM all_tables t
INNER JOIN all_ind_columns i ON t.owner = i.index_owner AND t.table_name = i.table_name
WHERE NOT EXISTS (
SELECT 1
FROM all_constraints c
WHERE c.table_name = t.table_name
AND c.constraint_type = 'R'
AND c.owner = t.owner
AND c.r_owner = i.index_owner
AND c.r_constraint_name = i.index_name
)
ORDER BY t.table_name;
```
这个查询会在 `all_tables` 和 `all_ind_columns` 视图之间进行内部连接,以查找在索引列上没有外键约束的表。如果表中有未建立的索引,它们会在查询结果中列出。
请注意,这个查询只能找到在 Oracle 数据库中缺失的索引,但无法检测在应用程序中是否需要创建额外的索引来提高查询性能。
Oracle查询执行计划中缺失的索引
在 Oracle 中,可以通过以下步骤来查找查询执行计划中缺失的索引:
1. 使用 EXPLAIN PLAN 命令生成查询执行计划,例如:
```
EXPLAIN PLAN FOR
SELECT *
FROM my_table
WHERE my_column = 'my_value';
```
2. 使用以下命令查看查询执行计划:
```
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY());
```
这将显示查询执行计划的详细信息,包括使用的索引。
3. 找到执行计划中缺失的索引。可以查看“Access Predicates”和“Filter Predicates”列,以确定可能需要的索引。如果有一个谓词没有索引支持,那么该谓词应该是缺失索引的候选。
4. 手动创建缺失的索引。可以使用以下命令创建索引:
```
CREATE INDEX my_index
ON my_table(my_column);
```
然后再次运行查询并检查执行计划,以确保新索引已经被使用。
请注意,创建过多的索引可能会影响数据库性能,因此应该谨慎地选择需要创建的索引。
阅读全文