你的数据库索引是否真的起作用了?

数据库2025-11-05 14:05:086161

为了加快你的数的起查询,增加正确的据库索引是必不可少的。 但是索引过了一段时间,当你的作用系统增长了,你可能会发现自己大量的数的起索引导致数据库的写操作变慢 -- 由于每一次对表的写操作,都需要在事务中更新索引。据库

也许,索引五年后,作用 你的数的起数据库(和你的查询)在某种方式中进化,不再需要一些索引了。据库例如,索引有一些明显的作用情况下,这两个索引是数的起多余的:

-- 原设计  CREATE INDEX ON customer (first_name);  -- 5年后  CREATE INDEX ON customer (first_name, last_name); 

但在许多其他情况下,事情并没有那么明显。据库例如…

你可能添加了一个在外键上的索引索引,WordPress模板但随着表的增长,你的数据库开始运行更多的哈希联接,而不是嵌套循环联接,这种情况下索引并没有被使用。 或者,你已经完全停止查询姓/名。 或者你已经开始使用一个比实际名称更具选择性的谓词。 或者你的客户突然都叫史密斯。

每个人都叫史密斯-倒霉的索引!

如果你的索引不再被使用,你可以(并且应该)删除它们。

但如何找到未使用的索引

如果你使用的是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

同样,这并不是说你的索引将永远不会被使用,只是它们最近还没有被使用过。现在,我不会真的给你展示使用上述语句的查询,在PL/SQL循环中运行其结果和使用EXECUTE IMMEDIATE删除所有的索引,因为你可能在你的源码下载生产环境中尝试。但是,以防万一你想尝试,这里有一个提示BEGIN

BEGIN   FOR i IN (/* above query here */) LOOP     EXECUTE IMMEDIATE       DR0P INDEX " || i.owner || "." || i.index_name || ";   END LOOP; END; /

但正如我说的。不要真的这样做!

本文地址:http://www.bzve.cn/news/917c62298460.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

一、用户概述SSH对于远程管理一台服务器来说是一个好方法。然而,SSH仍然存在着诸多问题。服务器和客户端的通信是安全的,不过这并不意味着涉及到的主机也是安全的。向外部世界打开一个SSH服务也就意味着允许强力攻击。复制代码代码如下:DenyHosts意在由Linux系统管理员运行,以帮助其挫败对SSH服务器的攻击(也称为基于字典的攻击或强力攻击)的企图。DenyHosts充当着一个对SSH和其它服务的动态阻击器,它依靠/etc/hosts.deny和 hosts.allow进行工作,并能够以动态方式构建重复地与我们的服务器连接的主机列表。默认情况下,这项服务会阻止来自那些不断地试图与我们的主机连接并实施访问的IP地址源。Denyhosts的处理在/etc/denyhosts.conf中进行配置。我们还可以通过Iptables行连接速率的限制,而且我们还应该在服务器上部署防火墙。一旦这些布置停当,我们就会确信自己在一台面向公众的主机上拥有了一个更加安全的SSH。

台式机SSD装系统教程(一步步教你如何将操作系统安装在台式机SSD上)

如何通过宏基笔记本启动U盘重装系统?(详细教程及步骤,让您轻松完成重装)

GTX780Ti冰龙版(超越极限,领略无尽游戏乐趣)

海氏烤箱(颠覆传统,轻松享受美食盛宴)

从笔记本Win8改为Win7系统的安装教程(轻松操作,迅速完成系统更换)

使用教程(一步步教你制作和使用USM启动盘,帮助你解决电脑系统问题)

如何选择适合的U盘容量进行电脑系统重装?(重装教程中,选择合适的U盘容量至关重要)

友情链接

滇ICP备2023006006号-39