如何发现数据库不再使用的索引Index吗?
作者:解道 发布时间:[ 2016/10/10 11:16:19 ] 推荐标签:索引 数据库
索引Index对于查询很重要,过了一段时间,当你的系统增长了,你可能会发现自己有大量的索引,这都会减慢到数据库的写操作,因为每个写入表中的操作,需要同时更新索引。
或者,5年后,您的数据库(和查询)已经演进了,过去索引不再需要。例如,下面两个索引是明显有一个是多余的:
-- 原来设计
CREATE INDEX ON customer (first_name);
-- 5年后
CREATE INDEX ON customer (first_name, last_name);
如果索引不再需要,删除它们。
如何发现没有用的索引?
如果使用是Oracle,可以访问产品系统,下面是通过获得使用索引的游标 缓存 中是否有任何查询的方法:
SELECT sql_fulltext
FROM v$sql
WHERE sql_id IN (
SELECT sql_id
FROM v$sql_plan
WHERE (object_owner, object_name)
= (('OWNER', 'IDX_CUSTOMER_FIRST_NAME'))
)
ORDER BY sql_text;
这个查询是做什么的?它查询游标高速 缓存 中的所有SQL语句(V$SQL)并且变量它们中每一条,在游标 缓存 中检查是否有任何有访问索引的执行计划元素(V $ sql_plan)。
一段时间内运行了这个任务后,如果这个查询不返回任何行,你可以得出这样的结论:你的索引可能不再需要了。
以上是发现不再使用的索引,下面是发现不再需要的索引方法:
运行简单查询,列出所有不再被v$sql_plan表引用的索引。
SELECT owner, index_name
FROM all_indexes
WHERE owner = 'OWNER'
AND (owner, index_name) NOT IN (
SELECT object_owner, object_name
FROM v$sql_plan
WHERE object_owner IS NOT NULL
AND object_name IS NOT NULL
)
ORDER BY 1, 2
这并不是说你的索引将永远不会被使用,而是他们近还没有被使用过。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11