导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

同时查询多个列,该创建什么样的索引?

whatwherewhyhow 2008-01-09 08:28:30
RT,在400W的纪录中查询电话号码SQL如下:

SELECT *
FROM PHONE
WHERE PHONE.PHN1 || PHONE.PHN2 || PHONE.PHN3
IN
(
'15959595950',
'059128282828',
'15959595952',
'15959595953'
)

PHN1为区号,PHN2为电话号,PHN3为分机号
这样的效率是极其低下的.
如果考虑使用索引.有没有一种索引能在PHN1,PHN2,PHN3三个字段上创建
这样查询起来速度会比较快些
目前是考虑新建一张表,将PHONE表的这3个字段查询出来然后Insert进新表里面的一个字段里.

INSERT INYO NEWTABLE(PHONENUMBER) SELECT PHONE.PHN1 || PHONE.PHN2 || PHONE.PHN3 FROM PHONE

请大家多多指教.
...全文
100 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
懒得去死 2008-02-13
单独给这三个字段建立索引,然后用UNION ALL 来连接效率应该会高点,数据大的时候。
回复
whatwherewhyhow 2008-01-09
目前是考虑新建一张表,将PHONE表的这3个字段查询出来然后Insert进新表里面的一个字段里.
--------------------------------------------------------------------------
看来只能是这样了?
回复
JL99000 2008-01-09
你这里用到的
WHERE PHONE.PHN1 || PHONE.PHN2 || PHONE.PHN3
IN
(
'15959595950',
'059128282828',
'15959595952',
'15959595953'
)
即使建立索引也是没有作用的
回复
kajaje 2008-01-09
http://topic.csdn.net/t/20030612/14/1907394.html
看看这个老帖子,或许有帮助
另外提示下,现在对于有些不必时时查询统计的大型数据库,多半利用值班程序在晚上或者其他空闲时间对库进行查询(统计),然后将结果记录在库中的表内,以供下次查询(统计)能迅速的显示结果.
回复
wzy_love_sly 2008-01-09
不是冲突,in不会用到索引.上面是组合索引,用那语句就行
回复
whatwherewhyhow 2008-01-09
谢谢,IN和索引之间有什么冲突吗?如果创建索引,应该创建什么样的索引呢?
回复
wzy_love_sly 2008-01-09
create index 索引名 on table(col1,col2,col3)
select * from table1 where col1=A and col2=B and col3=D
这样
回复
wzy_love_sly 2008-01-09
索引倒可以建,但你要是in不行

回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告