KingbaseESV8R6中查看索引常用sql
前言
KingbaseES具有丰富的索引功能,对于运行一段时间的数据库,经常需要查看索引的使用大小,使用状态等。
尤其重复索引的存在,有时会因为索引过多而造成维护成本加大和减慢数据库的运行速度。
下面是经常使用的查看索引的sql。
1.查看表上索引个数,是否唯一,表与索引大小。
SELECT CONCAT(n.nspname,'.', c.relname) AS table,
 i.relname AS index_name
,indisunique is_unique
,sys_size_pretty(sys_relation_size(x.indrelid)) AS table_size,
          sys_size_pretty(sys_relation_size(x.indexrelid)) AS index_size,
          sys_size_pretty(sys_total_relation_size(x.indrelid)) AS total_size
 FROM sys_class c
 JOIN sys_index x ON c.oid = x.indrelid
 JOIN sys_class i ON i.oid = x.indexrelid
 LEFT JOIN sys_namespace n ON n.oid = c.relnamespace
 WHERE c.relkind = ANY (ARRAY['r', 't']) AND c.relname like 'test1';
    table     | index_name | is_unique | table_size | index_size | total_size
--------------+------------+-----------+------------+------------+------------
 public.test1 | idx_id1    | f         | 8192 bytes | 16 kB      | 40 kB
 public.test1 | idx_id2    | f         | 8192 bytes | 16 kB      | 40 kB
(2 行记录)
2.索引的创建语句。
SELECT sys_get_indexdef(indexrelid) AS index_query
FROM sys_index
WHERE indrelid = 'test1'::regclass;
                      index_query
-------------------------------------------------------
 CREATE INDEX idx_id1 ON public.test1 USING btree (id)
 CREATE INDEX idx_id2 ON public.test1 USING btree (id)
(2 行记录)
3.获取支持的索引方法。
KingbaseES有许多索引方法,如BTree,Hash,GIST和GIN等。
TEST=# select distinct amname from sys_am;
 amname
--------
 bitmap
 btree
 brin
 heap
 spgist
 gist
 gin
 hash
(8 rows)
4.查询未使用的索引。
如果index_scans始终为0 或接近0,可以理解为该索引未使用unsed。
如果有些索引长期未被使用,这些索引不会发挥任何作用,而且会占用不必要的空间,让数据增删改的成本变大,增加备份的时间开销。考虑将其删除。
SELECT s.relname AS table_name,
       indexrelname AS index_name,
       i.indisunique,
       idx_scan AS index_scans
FROM   sys_catalog.pg_stat_user_indexes s,
       sys_index i
WHERE  i.indexrelid = s.indexrelid and idx_scan=0;
table_name |  index_name  | indisunique | index_scans
------------+--------------+-------------+-------------
 company    | company_pkey | t           |           0
 brand      | brand_pkey   | t           |           0
 t          | t_pkey       | t           |           0
 test1      | idx_id1      | f           |           0
 test1      | idx_id2      | f           |           0
4.1查询没有使用过的大于1MB的索引 top 10 (注意, PK、UK如果只是用于约束, 可能不会被统计计数,但不能删掉)。
select sys_size_pretty(sys_relation_size(indexrelid)),* from sys_stat_all_indexes where sys_relation_size(indexrelid)>=1024000 and (idx_scan=0 or idx_tup_read=0 or idx_tup_fetch=0)
and schemaname not in ('sys_toast','sys_catalog') order by sys_relation_size(indexrelid) desc limit 10;
5.查询重复的索引。
在KingbaseES中同一列可以重复创建索引,然而没有必要在表上有多个具有不同名称的相同索引,同样浪费空间。
SELECT   indrelid::regclass table_name,
         att.attname column_name,
         amname index_method,
         indkey
FROM     sys_index i,
         sys_class c,
         sys_opclass o,
         sys_am a,
         sys_attribute att
WHERE    o.oid = ALL (indclass)
AND      att.attnum = ANY(i.indkey)
AND      a.oid = o.opcmethod
AND      att.attrelid = c.oid
AND      c.oid = i.indrelid
GROUP BY table_name,
         att.attname,
         indclass,
         amname, indkey
HAVING count(*) > 1;
 table_name | column_name | index_method | indkey
------------+-------------+--------------+--------
 tmp        | a           | btree        | 1
(1 row)
SELECT relname,(array_agg(idx))[1] idx1,
    sys_get_indexdef((array_agg(idx))[1]) idx1_def,
    (array_agg(idx))[2] idx2,
    sys_get_indexdef((array_agg(idx))[2]) idx2_def,
    (array_agg(idx))[3] idx3,
    sys_get_indexdef((array_agg(idx))[3]) idx3_def
FROM (
    SELECT indrelid::regclass AS relname,
    indexrelid::regclass AS idx,
    (indrelid::text || indclass::text || indkey::text || COALESCE(indexprs::text,'') || COALESCE(indpred::text,'')) AS KEY
    FROM sys_index) sub
GROUP BY relname, KEY
HAVING count(*) > 1 \gx
-[ RECORD 1 ]-----------------------------------------------
relname  | tmp
idx1     | ind_01
idx1_def | CREATE INDEX ind_01 ON public.tmp USING btree (a)
idx2     | ind_02
idx2_def | CREATE INDEX ind_02 ON public.tmp USING btree (a)
idx3     |
idx3_def |
6.查看无效的索引。
如果 create concurrently index创建索引失败, 索引将处于invalid状态, 需要drop索引重建。
select indisvalid, indexrelid::regclass, indrelid::regclass, sys_get_indexdef(indexrelid) from sys_index where not indisvalid;
7.占用空间top 10的索引。
select schemaname,tablename,indexname,sys_size_pretty(sys_relation_size((quote_ident(schemaname)||'.'||quote_ident(indexname))::regclass)) from sys_indexes
order by sys_relation_size((quote_ident(schemaname)||'.'||quote_ident(indexname))::regclass) desc limit 10;
												
											KingbaseESV8R6中查看索引常用sql的更多相关文章
- SQL优化 MySQL版  - 索引分类、创建方式、删除索引、查看索引、SQL性能问题
		
SQL优化 MySQL版 - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...
 - SqlServer中查看索引的使用情况
		
--查看数据库索引的使用情况 select db_name(database_id) as N'TOPK_TO_DEV', --库名 object_name(a.object_id) as N'Top ...
 - Entity Framework中查看生成的SQL语句
		
Entity Framework 4.0 中是这样的,高版本的跟这个有些差异,不太一样,貌似已经到7了 using (Entities entities = new Entities()) { var ...
 - DBA常用SQL之DDL生成语句
		
获取对象定义的包为:dbms_metadata,其中的get_ddl函数是获取对象的函数 GET_DDL函数返回创建对象的原数据的DDL语句,参数说明 .object_type ---需要返回原数据的 ...
 - 转载: SQL Server中的索引
		
http://www.blogjava.net/wangdetian168/archive/2011/03/07/347192.html 1 SQL Server中的索引 索引是与表或视图关联的磁盘上 ...
 - SQL Server中的索引结构与疑惑
		
说实话我从没有在实际项目中使用过索引,仅知道索引是一个相当重要的技术点,因此我也看了不少文章知道了索引的区别.分类.优缺点以及如何使用索引.但关于索引它最本质的是什么笔者一直没明白,本文是笔者带着这些 ...
 - SQL Server中的索引
		
1 SQL Server中的索引 索引是与表或视图关联的磁盘上结构,可以加快从表或视图中检索行的速度.索引包含由表或视图中的一列或多列生成的键.这些键存储在一个结构(B 树)中,使 SQL Serve ...
 - SQL Server查看索引重建、重组索引进度
		
相信很多SQL Server DBA或开发人员在重建或重组大表索引时,都会相当郁闷,不知道索引重建的进度,这个对于DBA完全是一个黑盒子,对于系统负载非常大的系统或维护窗口较短的系统,你会遇到一些挑战 ...
 - MySQL查看 InnoDB表中每个索引的高度
		
我们都知道MySQL里,索引通常用B+树来实现的.B+树的叶子结点才具体保存数据(聚簇索引保存的是行数据:普通索引是主键,如有需要得回表),非叶子结点都是用来索引叶子结点的.假设索引高度为h,那么每次 ...
 - (转)SQL Server中的索引结构与疑惑
		
说实话我从没有在实际项目中使用过索引,仅知道索引是一个相当重要的技术点,因此我也看了不少文章知道了索引的区别.分类.优缺点以及如何使用索引.但关于索引它最本质的是什么笔者一直没明白,本文是笔者带着这些 ...
 
随机推荐
- 【framework】InputChannel创建流程
			
1 前言 IMS启动流程 中介绍了 IMS 在 Java 层和 Native 层的初始化流程,以及创建 NativeInputManager.InputManager.InputReader.Inpu ...
 - powerdesigner自定义实体显示的属性
			
我做概要设计的时候需要画实体的逻辑模型图,默认的时候是这样的: 但是我想只保留属性名,隐藏数据类型和下面的横线怎么办?效果如下: 按以下操作即可实现:
 - virtualbox安装oracle linux后找不到eth0
			
用VirtualBox装oracle linux, ifconfig发现没有eth0: 按照以下步骤操作: 1 用ifconfig eth0 up启动网卡(默认未开启),执行ifconfig下看到et ...
 - Java并发编程实例--14.在一个同步类中安排独立属性
			
当你使用synchronized关键字去保护一个代码块时,你必须传入一个对象的引用. 正常来讲,你讲使用this关键字去引用执行这个方法的对象,但是你可以使用其他对象的引用. 通常的,这些对象将会是专 ...
 - 发送HTML模板邮件
			
概述 为了增强邮件内容展示的样式,可以将普通的文本邮件转换为HTML内容格式. 在Java中,可以通过页面模板技术来实现.具体来说,可以使用Thymeleaf模板. 具体实现 首先,在项目中引入Thy ...
 - 狂神说Git学习笔记整理
			
Git 版本控制  在开发过程中,项目会进行版本迭代,新版本会取代旧版本,但是我们不希望直接删除旧版本,所以就需要一个版本管理器来管理新旧版本,不然就是手动控制... 多人开发必须使用版本控制!!! ...
 - 【LeetCode二叉树#15】二叉搜索树中的众数(递归中序遍历)
			
二叉搜索树中的众数 力扣题目链接(opens new window) 给定一个有相同值的二叉搜索树(BST),找出 BST 中的所有众数(出现频率最高的元素). 假定 BST 有如下定义: 结点左子树 ...
 - 在Study.BlazorOne项目中引入Study.Trade模块的实体的表结构
			
# 1.修改EntityFrameworkCore项目下的BlazorOneDbContext文件,增加一行代码即可 增加Study.Trade.EntityFrameworkCore中的这个方法: ...
 - 【Azure 应用服务】App Service For Linux 环境中,如何从App Service中获取GitHub私有库(Private Repos)的Deploy Key(RSA key)呢?
			
问题描述 为App Service For Linux配置CI/CD,源代码在GitHub私有库中,在发布时候报错 Cannot find SourceControlToken with name B ...
 - 关于KMP模式匹配的一些思考
			
算法简介 模式匹配 给定主串text和模式串pattern,在主串中查找,如果找到了模式串,返回模式串在主串中的起始位置,从1开始计数. 暴力求解求解模式匹配 算法的核心思想是:蛮力法.即使用两个指针 ...