• PG索引失效/生效分析


    PG索引失效/生效分析

    索引失效场景

    1、任何计算、函数、类型转换 2、!=、<> 3、IS NULL或者IS NOT NULL。类似导致索引失效的还有NOT IN,NOT LIKE等,但是NOT EXISTS不会导致索引失效。 4、模糊查询通配符在开头 5、索引字段在表中占比较高 6、多字段btree索引查询条件不包含第一列 7、在WHERE中使用OR时,有一个列没有索引,那么其它列的索引将不起作用 8、多字段索引查询条件使用OR 在索引列上进行大于大于这类的比较后,这个列的索引是有效的,但是其后的索引将失效

    jsonb字段索引分析(json支持GIN索引结构)

    1.索引创建jsonb_ops操作符

    -- ----------------------------
    -- Indexes structure for table tb_security_event
    -- ----------------------------
    CREATE INDEX "notification_index" ON "public"."tb_security_event" USING gin (
      "notification" "pg_catalog"."jsonb_ops"
    );
    

    索引分析执行SQL:

    explain analyze verbose SELECT
    	securityev0_.ID AS id1_35_,
    	securityev0_.application AS applicat2_35_,
    	securityev0_.asset AS asset3_35_,
    	securityev0_.cia_level AS cia_leve4_35_,
    	securityev0_.component AS componen5_35_,
    	securityev0_.correlation_info AS correlat6_35_,
    	securityev0_.device_ip AS device_i7_35_,
    	securityev0_.event_change AS event_ch8_35_,
    	securityev0_.event_id AS event_id9_35_,
    	securityev0_.event_type AS event_t10_35_,
    	securityev0_.extra_fields AS extra_f11_35_,
    	securityev0_.insert_time AS insert_12_35_,
    	securityev0_.logs AS logs13_35_,
    	securityev0_.NAME AS name14_35_,
    	securityev0_.notification AS notific15_35_,
    	securityev0_.remarks AS remarks16_35_,
    	securityev0_.sensor_id AS sensor_17_35_,
    	securityev0_.siem_time AS siem_ti18_35_,
    	securityev0_.status AS status19_35_,
    	securityev0_.traffic AS traffic20_35_,
    	securityev0_.update_time AS update_21_35_ 
    FROM
    	tb_security_event securityev0_ 
    WHERE
    	securityev0_.notification @> '{"status":"gdz"}';
    ORDER BY
    	securityev0_.insert_time DESC 
    	LIMIT 5
    

    注意点:

    jsonb上的GIN索引支持“@>” “?” “?&” “?|”操作符

    2.索引失效场景

    当前表有索引,但是表数据为空 或者 表中只有少量数据 不走jsonb字段索引。

    1624436135442

    1624436168219

    1624436356368

    SQL执行结果(未使用索引):

    1624436668854

    3.索引生效场景

    当表数据量多的情况下, jsonb字段索引生效。

    1624436545788

    SQL执行结果:(使用索引)

    1624436631775

    参考:https://developer.aliyun.com/article/111793

  • 相关阅读:
    关于idea的目录, mybatis里mapper无法用resource获取 和 驼峰命令规则
    直接调用类方法 和 new再调用方法 的区别
    腾讯笔试题
    linux安装包
    centos 学习笔记一
    putty链接l虚拟机linux centos
    单链表的一般处理(C语言)
    华为2011机试题
    【转】函数返回类型为指针类型时的一些问题
    在 Windows Server 2012 上安装 dotNET Framework v3.5
  • 原文地址:https://www.cnblogs.com/mzyc/p/15553294.html
Copyright © 2020-2023  润新知