简单查询,效率极低,求讨论。

ineedchrist 2016-11-06 09:42:14
现有两张表
TableA 结构如下:
DeptID INT,
DeptName VARCHAR;
DeptID 有索引

TableB 结构如下:
UserID int,
DeptID int,
UserName varchar,
UserTel varchar,
UserAddress varchar
DeptID 有索引

现查询语句是:
select top 25 a.deptname from TableA a INNER JOIN TableB b ON a.DeptID=b.DeptID
WHERE (a.DeptName like '%小%' or b.UserName like '%小%' or b.UserTel like '%小%' or b.UserAddress like '%小%' )

随着数据量增大,查询数据越来越慢,现在TableA 有18万数据,TableB有28万数据,类似的库有100多个,放在一个机器上,几百个用户并发访问,每分钟有几百次请求,CPU常常100%。

请大牛帮想想优化办法。






...全文
439 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2016-11-07
  • 打赏
  • 举报
回复
WHERE (a.DeptName like '%小%' or b.UserName like '%小%' or b.UserTel like '%小%' or b.UserAddress like '%小%' ) --------------- 这样的条件,在SQL SERVER实现只能用全文检索提高效率,把这几列建上一个全文检索 或用中间件coreseek/sphinx去t处理
Ginnnnnnnn 2016-11-07
  • 打赏
  • 举报
回复
可以尝试弄个视图,然后把这几个查询列并在一个列里面,做个视图索引,看下情况。
卖水果的net 2016-11-06
  • 打赏
  • 举报
回复
考虑一下全文检索,如果还慢,那就好就别用关系型数据了,改用noSQL ,比如 redis ,或者用 solr ; 关系型数据库,不大合适你这个场景,好几百个并发。

27,579

社区成员

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

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