查看: 5027|回复: 7

[讨论] 关于select * from a where id like '%123',按后n位查询的优化?

[复制链接]
论坛徽章:
26
数据库板块每日发贴之星
日期:2006-09-04 01:02:512009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:虎
日期:2009-08-12 13:08:002010新春纪念徽章
日期:2010-01-04 08:33:082011新春纪念徽章
日期:2011-02-18 11:43:35ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28凯迪拉克
日期:2013-11-20 21:13:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31双子座
日期:2015-09-25 14:44:15
发表于 2009-4-3 10:26 | 显示全部楼层 |阅读模式
有一张表,起名为A吧,大概数据量在千万,
需要根据身份证id列的<后n位>进行查询,
select * from a where id like '%123',
或like '%456123'等,

大家有没有好一点的办法?
论坛徽章:
31
数据库板块每日发贴之星
日期:2008-08-25 01:02:02数据库板块每日发贴之星
日期:2011-08-14 01:01:01茶鸡蛋
日期:2011-08-14 16:42:13ITPUB十周年纪念徽章
日期:2011-09-27 16:32:49ITPUB十周年纪念徽章
日期:2011-11-01 16:24:512012新春纪念徽章
日期:2012-01-04 11:54:26版主1段
日期:2012-05-15 15:24:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:09:19现任管理团队成员
日期:2012-10-18 17:10:24马上有车
日期:2014-02-19 11:55:14
发表于 2009-4-3 10:41 | 显示全部楼层
如果所要查询的后n位是固定值的话(如:3),可以创建一个函数索引,substr(id,-3)

使用道具 举报

回复
论坛徽章:
41
生肖徽章2007版:鼠
日期:2008-03-31 15:43:34鲜花蛋
日期:2011-09-08 16:40:12ITPUB十周年纪念徽章
日期:2011-11-01 16:23:26复活蛋
日期:2011-11-29 13:44:05ITPUB元老
日期:2011-12-19 18:18:382012新春纪念徽章
日期:2012-01-04 11:53:54奥运会纪念徽章:跆拳道
日期:2012-07-20 14:21:01ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15蛋疼蛋
日期:2012-11-19 12:19:402013年新春福章
日期:2013-02-25 14:51:24
发表于 2009-4-3 11:26 | 显示全部楼层
http://karsus.itpub.net/post/36558/477428

我作过一个类似的测试。
函数代替Like走FFS,Consistent gets没减少,但能显著提高速度。

使用道具 举报

回复
论坛徽章:
136
ITPUB年度最佳技术回答奖
日期:2010-06-12 13:17:14现代
日期:2013-10-02 14:53:59路虎
日期:2013-11-22 12:26:182014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上加薪
日期:2014-02-19 11:55:14
发表于 2009-4-3 11:36 | 显示全部楼层

使用道具 举报

回复
论坛徽章:
20
授权会员
日期:2005-11-02 13:35:57ITPUB8周年纪念徽章
日期:2009-09-27 10:21:22祖国60周年纪念徽章
日期:2009-10-09 08:28:00生肖徽章2007版:兔
日期:2009-11-13 10:54:06生肖徽章2007版:蛇
日期:2009-11-28 18:44:592010新春纪念徽章
日期:2010-01-04 08:33:082010新春纪念徽章
日期:2010-03-01 11:06:292010年世界杯参赛球队:瑞士
日期:2010-04-03 20:50:32ITPUB9周年纪念徽章
日期:2010-10-08 09:31:212009日食纪念
日期:2009-07-22 09:30:00
发表于 2009-4-3 14:02 | 显示全部楼层
反转索引就是干这个的吧

使用道具 举报

回复
论坛徽章:
2
2010广州亚运会纪念徽章:皮划艇
日期:2010-09-03 13:38:55ITPUB9周年纪念徽章
日期:2010-10-08 09:28:52
发表于 2009-4-3 14:18 | 显示全部楼层
建函数索引,取后几位

使用道具 举报

回复
论坛徽章:
26
数据库板块每日发贴之星
日期:2006-09-04 01:02:512009日食纪念
日期:2009-07-22 09:30:00生肖徽章2007版:虎
日期:2009-08-12 13:08:002010新春纪念徽章
日期:2010-01-04 08:33:082011新春纪念徽章
日期:2011-02-18 11:43:35ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28凯迪拉克
日期:2013-11-20 21:13:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31双子座
日期:2015-09-25 14:44:15
 楼主| 发表于 2009-4-3 14:43 | 显示全部楼层
rollingpig的
1、create index test_like__name_reverse on test_like(reverse(object_name));
2、select * from test_like where reverse(object_name)like reverse('%AS');
应该是不错的。

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:拳击
日期:2008-04-24 10:00:15CTO参与奖
日期:2009-02-12 11:45:482012新春纪念徽章
日期:2012-02-07 09:59:35ITPUB季度 技术新星
日期:2012-02-16 14:53:16鲜花蛋
日期:2012-03-19 18:10:462013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
发表于 2009-7-9 13:20 | 显示全部楼层
学习,不错

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表