关于查询效率的问题

张雨露 2013-01-18 02:31:21
SELECT * FROM A WHERE ID = '872918229' 查询用了0.031秒

SELECT * FROM A WHERE ID = 872918229 查询用了40秒
ID VARCHAR2(50)

两者查询效率为什么差这么多


...全文
589 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
张雨露 2013-01-21
  • 打赏
  • 举报
回复
周末一直没上网 现在结贴 不止因为有因为有隐形转换 还有就是没有调用索引的问题 谢谢大家的帮助
张雨露 2013-01-21
  • 打赏
  • 举报
回复
引用 10 楼 hebeishimeng 的回复:
SQL code?123SELECT * FROM A WHERE ID = 872918229--与这个效果差不多吧SELECT * FROM A WHERE to_number(ID) = 872918229 id是字符串类型,与数字类型进行比较。oracle默认将id先转化为数字型,再进行比较,这样会变慢。另外如果id上有索引,也会失效。
索引失效了 所以会执行这么久
kingkingzhu 2013-01-19
  • 打赏
  • 举报
回复
你的这个问题可以重现么 贴下执行计划看 就算转型应该也不会导致差别这么大
ajune 2013-01-19
  • 打赏
  • 举报
回复
因为int转换成varchar2也是需要一定时间的,SELECT * FROM A WHERE ID = '872918229' 等价于SELECT * FROM A WHERE ID = to_char(872918229)
raymonshi 2013-01-19
  • 打赏
  • 举报
回复
SELECT * FROM A WHERE ID = 872918229
--与这个效果差不多吧
SELECT * FROM A WHERE to_number(ID) = 872918229
id是字符串类型,与数字类型进行比较。oracle默认将id先转化为数字型,再进行比较,这样会变慢。另外如果id上有索引,也会失效。
善若止水 2013-01-19
  • 打赏
  • 举报
回复
这就对了,里面有隐士转换的问题
linwaterbin 2013-01-18
  • 打赏
  • 举报
回复
执行计划开起来看一下就知道啦 这里肯定是存在隐式转换! 执行计划里的Predicate Information会告诉你什么转成了啥了
yuppy 2013-01-18
  • 打赏
  • 举报
回复
引用 6 楼 renkuan719 的回复:
隐性的对字段做了类型转换了 花费了大量的时间
学习了。
槑党--一缕风 2013-01-18
  • 打赏
  • 举报
回复
隐性的对字段做了类型转换了 花费了大量的时间
  • 打赏
  • 举报
回复
一般的id字段 都是number类型 然后设置主键 正对这字段的查询效率快很多
我看见佛 2013-01-18
  • 打赏
  • 举报
回复
引用 3 楼 张雨露 的回复:
引用 2 楼 shadow1986a 的回复:后面的 隐性的对字段做了类型转换了 除了隐形转换还有没有别的原因了?
木了,就这个。
张雨露 2013-01-18
  • 打赏
  • 举报
回复
引用 2 楼 shadow1986a 的回复:
后面的 隐性的对字段做了类型转换了
除了隐形转换还有没有别的原因了?
shadow1986a 2013-01-18
  • 打赏
  • 举报
回复
后面的 隐性的对字段做了类型转换了
kilior 2013-01-18
  • 打赏
  • 举报
回复
不要在条件里做类型转换。。。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧