建立索引提高查询速度的问题!

hhp520 2009-03-03 05:22:54
我有两个表, users(字段id, cnname, usertype, photo等), contacts表(字段userid, comname等), 其中id与userid关联
我想实现查询: 可以查询cnname字段值, 也可以查询按contacts表的comname查询(找出公司名包含关键词的用户),
我写的SQL语句为:
select cnname,usertype,photo from users where (m.cnname like '%" & keywords & "%' or EXISTS (select userid from contacts where firmname like '%" & keywords & "%' and userid =m.id)) 

请教各位,SQL语句是不是还可以优化,如果是这样两个表关联查询的话,应该怎么样建立索引提高查询速度?
...全文
88 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hhp520 2009-03-04
  • 打赏
  • 举报
回复
大家帮我看看,查询速度慢,也就10万的数据
hhp520 2009-03-04
  • 打赏
  • 举报
回复
like '" & keywords & "%' 这样用了,是不是就查不全了啊? 比如查“平”,那么“李平”好像就出不来了吧
zzxap 2009-03-04
  • 打赏
  • 举报
回复
用到 like '%" & keywords & "%' 改为用到 like '" & keywords & "%'
hhp520 2009-03-04
  • 打赏
  • 举报
回复
用到 like '%" & keywords & "%' 和 EXISTS 的话,怎么建索引其查询速度都不会太高.

那应该怎么弄一下,能告诉一下吗?我是要按关键字查询,难道不用 like '%" & keywords & "%'吗?
dawugui 2009-03-03
  • 打赏
  • 举报
回复
用到 like '%" & keywords & "%' 和 EXISTS 的话,怎么建索引其查询速度都不会太高.

如何加快查询速度

1、升级硬件
2、根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。
3、扩大服务器的内存
4、增加服务器CPU个数
5、对于大的数据库不要设置数据库自动增长,它会降低服务器的性能
6、在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,后果严重。
7、查询时不要返回不需要的行、列
8、用select top 100 / 10 Percent 来限制用户返回的行数或者SET ROWCOUNT来限制操作的行
9、在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数
10、一般在GROUP BY 个HAVING字句之前就能剔除多余的行,所以尽量不要用它们来做剔除行的工作。他们的执行顺序应该如下最优:
select的Where字句选择所有合适的行,Group By用来分组个统计行,Having字句用来剔除多余的分组。这样Group By 个Having的开销小,查询快.对于大的数据行进行分组和Having十分消耗资源。如果Group BY的目的不包括计算,只是分组,那么用Distinct更快
11、一次更新多条记录比分多次更新每次一条快,就是说批处理好



这个帖子主要总结提高查询速度的方法,涉及到减少连接数据库次数、建立索引、优化语句等方面。

关于索引,推荐转载的这篇文章
http://blog.csdn.net/dutguoyi/archive/2006/01/10/575617.aspx

改善SQL语句的效率
http://community.csdn.net/Expert/topic/5087/5087396.xml?temp=.345669
数据量很大怎样加快索检速度
http://community.csdn.net/Expert/topic/5058/5058320.xml?temp=.1229517
索引建立方法的区别
http://community.csdn.net/Expert/topic/5068/5068154.xml?temp=.3010218
频繁插入删除数据需要更新索引
http://community.csdn.net/Expert/topic/4937/4937910.xml?temp=.8428614
测试了一下sql server 2005 全文检索
http://community.csdn.net/Expert/topic/4878/4878430.xml?temp=.6049311

其他关于效率的高频问题

判断一个表的数据不在另一个表中最优秀方法?
http://community.csdn.net/Expert/topic/5038/5038742.xml?temp=.4704553
删除千万级表中重复记录的办法
http://community.csdn.net/Expert/topic/5089/5089261.xml?temp=.7907068

数据库数据查询变得不正常类型问题

大数据量,稳定运行一段时候以后无法得到查询结果。
http://community.csdn.net/Expert/topic/4810/4810464.xml?temp=9.014529E-02




ojuju10 2009-03-03
  • 打赏
  • 举报
回复
select cnname,usertype,photo from users
where (cnname like '%" & keywords & "%' )
union
select cnname,usertype,photo from users m
where EXISTS (select 1 from contacts where firmname like '%" & keywords & "%' and userid =m.id))
shizheyangde 2009-03-03
  • 打赏
  • 举报
回复
字段id,字段userid
应该是主键吧,有主键的话,就不用其他索引了,如果可以的建上主外健约束

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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