首页 > 数据库 >sql优化-错误强制类型转换导致索引失效

sql优化-错误强制类型转换导致索引失效

时间:2024-08-26 21:36:33浏览次数:7  
标签:类型转换 Scan text t1 索引 sql where select

使用GaussDB数据库进行测试

创建下面表,仅有一个字段ainteger类型。声明其为主键,数据库会默认为其建立索引。

create table t1(
    a int PRIMARY KEY
);

使用\d+查看表结构:

gaussdb=# \d+ t1
                          Table "public.t1"
 Column |  Type   | Modifiers | Storage | Stats target | Description
--------+---------+-----------+---------+--------------+-------------
 a      | integer | not null  | plain   |              |
Indexes:
    "t1_pkey" PRIMARY KEY, btree (a) TABLESPACE pg_default
Has OIDs: no
Options: orientation=row, compression=no

查看select * from t1 where a = 1;执行计划:

gaussdb=# explain select * from t1 where a = 1;
                              QUERY PLAN
-----------------------------------------------------------------------
 [Bypass]
 Index Only Scan using t1_pkey on t1  (cost=0.00..8.27 rows=1 width=4)
   Index Cond: (a = 1)
(3 rows)

可以看到该语句顺利使用B树索引:Index Only Scan

查看select * from t1 where a::text = 1;执行计划:

gaussdb=# explain select * from t1 where a::text = 1;
                     QUERY PLAN
----------------------------------------------------
 Seq Scan on t1  (cost=0.00..52.04 rows=12 width=4)
   Filter: (((a)::text)::bigint = 1)
(2 rows)

可以看到该语句从使用B树索引,改为顺序扫描:Seq Scan。因为::text将a类型强转为text类型,也就无法使用索引。

::是类型转换操作符,用于将一个表达式的值转换为另一种数据类型。

标签:类型转换,Scan,text,t1,索引,sql,where,select
From: https://www.cnblogs.com/cnyuyang/p/18381635

相关文章

  • 基于Java+SpringBoot+Mysql实现高校教务信息系统功能设计与实现二
    一、前言介绍:1.1项目摘要高校教务信息系统课题的提出,主要源于高校日常管理工作的复杂性和重要性。作为高校的基本任务,人才培养离不开教学与管理工作的有效组织和协调。教务管理作为高校日常管理的核心组成部分,涉及教学资源的合理配置、教学过程的科学规划以及教学质量的......
  • 基于Java+SpringBoot+Mysql实现高校教务信息系统功能设计与实现三
    一、前言介绍:1.1项目摘要高校教务信息系统课题的提出,主要源于高校日常管理工作的复杂性和重要性。作为高校的基本任务,人才培养离不开教学与管理工作的有效组织和协调。教务管理作为高校日常管理的核心组成部分,涉及教学资源的合理配置、教学过程的科学规划以及教学质量的......
  • sqli-labs靶场通关攻略 31-35
    主页有sqli-labs靶场通关攻略1-30第三一关less-31闭合方式为?id=1&id=1")--+步骤一:查看数据库名http://127.0.0.1/less-31/?id=1&id=-1%22)%20union%20select%201,database(),3%20--+ 步骤二:查看表名http://127.0.0.1/less-31/?id=1&id=-1%22)%20union%20select%2......
  • MSSQL SQLi Labs 手工注入靶场
    less-1步骤一:判断注入方式 ?id=1'--+步骤二:判断后台是否是MYSQL数据库?id=1'andexists(select*fromsysobjects)--+步骤三:查询数据库信息,user回显的dbo表示是最⾼权限,如果是⽤户的名字表示是普通权限?id=-1'unionselect1,user,is_srvrolemember('public');-......
  • Request processing failed:MyBatisSystemException 黑马web开发课程P152中可能出现的
    该异常的最后一句,通过翻译,大概是:   [dispatcherServlet]:servlet.service()forservlet[dispatcherServlet]在路径[]的上下文中抛出异常[请求处理失败:MyBatisSystemException]    经过对代码的检查,发现controller,sevice,dao层业务逻辑都没有问题dao层的map......
  • sqli-labs靶场通关攻略(31-35关)
    第31关(")闭合)查数据库?id=")unionselect1,2,database()--+查表?id=")unionselect1,2,group_concat(table_name)frominformation_schema.tableswheretable_schema='security'--+查列?id=")unionselect1,2,group_concat(column_nam......
  • OceanBase-合并问题-工单处理常用SQL1
     OceanBase-合并问题-工单处理常用SQL1全量合并-------------------------------------------------------------OB默认是增量合并【发起的指定表的全量合并】1、修改表的模式,全量合并https://www.oceanbase.com/knowledge-base/oceanbase-database-2000000102......
  • MySQL事务详细讲解和案例示范
    在数据库系统中,事务是确保数据一致性和完整性的关键机制。它是指一组要么全部执行,要么全部回滚的操作,从而保证数据的原子性。一、事务的ACID属性事务具有四个基本属性,简称为ACID属性。这四个属性是保障事务操作可靠性的重要基石。原子性(Atomicity):定义:事务中的所有操......
  • HIVE SQL 高频(持续更新)
    整理自数据分析常考面试题100题1.连续日期1、为日期排序 row_number()over(partitionbyuse_idorderbydate)asrank2、求日期和排序的差值3、求diff出现最多的次数 max(count(diff))例1:-每个用户一周活跃天数-SELECTuser_id,COUNT(1)ASactiv......
  • 什么是索引
    1、什么是MySQL索引?官方上面说索引是帮助MySQL高效获取数据的数据结构,通俗点的说,数据库索引好比是一本书的目录,可以直接根据页码找到对应的内容,目的就是为了加快数据库的查询速度。索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息......