大数据量表索引不生效问题

fanlyfly_yang 2010-02-09 10:34:44
几百万数据量的表,例如table1,有a,b,c字段,a是主键,a和c都加了索引,现在模糊查询c字段(VARCHAR2类型),
用table.c like 'xxx%' 索引不生效,之前听过在后面加通配符可能命中索引,也可能不命中,怎么解决好?
...全文
234 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fanlyfly_yang 2010-02-09
  • 打赏
  • 举报
回复
引用 2 楼 yy_mm_dd 的回复:
索引字段上不建议进行计算了,不晓得和这个有没有关系.你的like可以用别的代替不?

因为模糊查询的是客户地址,所以只能用like了
YY_MM_DD 2010-02-09
  • 打赏
  • 举报
回复
索引字段上不建议进行计算了,不晓得和这个有没有关系.你的like可以用别的代替不?
suiziguo 2010-02-09
  • 打赏
  • 举报
回复
贴出执行计划。另外查询结果有多少条记录?
palm_civet 2010-02-09
  • 打赏
  • 举报
回复
like 'xxx%' 是会走索引的,可能是cbo选择的结果
studying_ 2010-02-09
  • 打赏
  • 举报
回复
索引字段上不建议进行计算了
oraclemch 2010-02-09
  • 打赏
  • 举报
回复
引用楼主 fanlyfly_yang 的回复:
几百万数据量的表,例如table1,有a,b,c字段,a是主键,a和c都加了索引,现在模糊查询c字段(VARCHAR2类型),
用table.c like 'xxx%' 索引不生效,之前听过在后面加通配符可能命中索引,也可能不命中,怎么解决好?


模糊查询要走函数索引,你需要建立函数索引才行啊!
canminco 2010-02-09
  • 打赏
  • 举报
回复
用like,in等关键字,索引是不会生效的。
存储过程的安全及性能优化 存储过程分类  系统存储过程  自定义存储过程  SQL Server使用者编写的存储过程  扩展存储过程  动态链接库(DLL)函数的调用看,主要用于客户端和服务器端之间进行通信  exec master..xp_cmdshell 'dir *.exe' -- 执行目录命令查询[sql2005\sql2008]  exec master..xp_fixeddrives --列出硬盘分区各自可用空间  xp_regwrite根键,子键,值名,值类型,值【sql2008拒绝访问】  写入注册表,例如:  exec master..db.xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion\run','TestValueName','reg_sz','hello'  xp_regdeletevalue 根键,子键,值名【sql2008拒绝访问】  删除注册表某个值  xp_regdeletekey键,值【sql2008拒绝访问】  删除该键下包括的所有值 xp_cmdshell语法  xp_cmdshell {'command_string'} [,no_output]  command_string是在操作系统命令行解释器上执行的命令字符串。command_string数据类型为varchar(255)或者nvarchar(4000),没有默认值  no_output为可选参数,可以控制是否想客户端返回信息  该存储过程一般情况下被禁用的,需要手动开启使用,如下:  exec sp_configure 'show advanced options',1  go   reconfigure  go   exec sp_configure 'xp_cmdshell',1—1表示启用,0表示禁用  go   reconfigure  go 删除xp_cmdshell SQL SERVER200删除xp_cmdshell use master exec sp_dropextendedproc 'xp_cmdshell' go SQL SERVER2005以上禁用xp_cmdshell,但不能删除掉 exec sp_configure 'xp_cmdshell',0 —1表示启用,0表示禁用  go reconfigure --让sp_configurre立即生效  go  exec sp_configure 'show advanced options',0  go   reconfigure  go --注意:SQL SERVER2008考虑安全性很多存储过程直接被拒绝访问 恢复/启用扩展存储过程 SQLServer2000 use master exec sp_addextendedproc xp_cmdshell,'xplog70.dll' go SQL Server2005或SQL Server2008启用xp_cmdshell  exec sp_configure 'show advanced options',1  go   reconfigure  go   exec sp_configure 'xp_cmdshell',1—1表示启用,0表示禁用  go   reconfigure  go 扩展存储过程的定义  扩展存储过程是SQL Server中的另一类存储过程,它是以其它语言编写的外部程序,是以动态链接库(DLL)形式存储在服务器上,最终SQLServer就可以动态加载并执行它们  编写好后使用SQLServer的固定角色sysadmin注册该扩展存储过程,并将执行权限授予其它用户,这个扩展存储过程只能添加到master数据库。  在编写扩展存储过程中可能要用到某些系统存储过程,这些系统存储过程如下: 利用OLE自动化存储过程调用dll 1.创建类库程序集 namespace PB_ExtendProcedure { public class ExtendProcedure { public string SayHi() { return "hello world"; } } } 2.生成动态链接库并注册到系统中 2.1.生成动态链接库使用VS2010命令行工具 使用sn命令生成一个强命名文件: sn -k he

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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