网站首页 > java教程 正文
经定位,是因为一条垃圾 SQL 引起的!!
其实也就是一条很简单的 SQL:
select .. from xxx where xx_no = 20200400001
为了信息安全,以上 SQL 经过处理。
其实就是根据 XX_NO 查询一 条数据,然后查询条件和字段数据类型不一致,结果隐式转换导致索引失效而全表扫描……
- 字段类型为:NVARCHAR2
- 查询条件类型为:NUMBER
这也是老生常谈的问题了,MySQL 也有同样的问题,SQL很简单,问题很严重!!!
来看下数据类型不一致时的 Oracle 的查询解释计划:
select .. from xxx where xx_no = 20200400001
结果:导致隐式转换,全表扫描
当字段类型和查询条件数据类型不一致的时候,如果没有转换函数,就会默认隐式转换,当数据类型不能隐式转换时就会报错。
再看下数据类型一致时的 Oracle 的查询解释计划:
select .. from xxx where xx_no = ‘20200400001’
结果:唯一索引扫描
再看下两个 SQL 的 IO、CPU 耗费,全表扫描和走唯一索引时的效率真是差距太大,全表扫描是大忌!
还好这个表的数据不是很大,不然后果会不堪设想。。
所以在工作中,应该要避免隐式转换,要使用显式转换(转换函数,),遵循 “字段是什么类型,就用什么类型的” 的原则,多用查询分析器检查下。
关注Java技术栈,分享更多主流的Java技术~
猜你喜欢
- 2024-10-05 java8新特性Base64(java8新特性Base64位)
- 2024-10-05 我的Java Web之路64 - 会话过期链接失效问题及转发和重定向解析
- 2024-10-05 Java Web项目部署(四)-Redis、Nginx
- 2024-10-05 “全栈2019”Java第八十四章:接口中嵌套接口详解
- 2024-10-05 “全栈2019”Java第九十八章:局部内部类访问作用域成员详解
- 2024-10-05 Spring Boot图片文件转Base64(springboot 图片文件转base64)
- 2024-10-05 “全栈2019”Java第八十五章:实现接口中的嵌套接口
- 2024-10-05 Base64与URLBase64浅析(base64_url)
- 2024-10-05 Java、JS、OC、Flutter的Base64编码和解码
- 2024-10-05 java处理图片与base64编码互相转换
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)