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

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

请大家多多指教.
...全文
175 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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不行

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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