一个数据库优化问题

sam-fat-chang 2016-06-15 02:10:58
一个系统通过用户ID从数据库中查询信息进行登录,当用户信息表数据量很大(已经影响到登录性能的状态),请问有什么优化策略,已知只有少量一部分用户会经常访问系统。
...全文
6230 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
老牛18岁 2018-10-29
  • 打赏
  • 举报
回复
把凡是where条件用到的字段都加上索引.
HongFeijar 2018-10-23
  • 打赏
  • 举报
回复
加 缓存 或者 将已有数据分表 分库
hash_boy1 2018-06-21
  • 打赏
  • 举报
回复
将高活跃用户缓存到redis里相对好一点。
u014518951 2018-05-16
  • 打赏
  • 举报
回复
楼主只是做个LOGIN的登陆方法.登陆的时候查一下用户名和密码是否匹配.加索引吧
yanbingwei86 2018-02-25
  • 打赏
  • 举报
回复
通用的做法是 session走缓存
绿树凝霜 2018-02-10
  • 打赏
  • 举报
回复
一年半以前的帖子你们还在挖坟。。。
一名码农、 2018-02-02
  • 打赏
  • 举报
回复
加个缓存,encache这种轻量级的框架还是挺好用的
点点丶小先森 2018-02-01
  • 打赏
  • 举报
回复
解决思路: 1、数据库方面:读写分离,分库分表,添加索引,如果要使用中间件的话,建议使用阿里的drds完全可以解决数据量大的问题 2、sql优化:where条件跟上添加索引的字段,避免全表或则全库检索 3、服务处理:做切面操作,让我们DML操作走master库,DQL走slave库读数据,为保持原子性,最好添加缓存策略,做到业务端透明 4、检索引擎:查询走solr或者elasticsearch库,全文检索引擎的查询速率是非常快的,因为库里的每个字段都添加了索引,可以解决查询pending,timeout的问题,同样要注意在同步数据的过程中延迟的问题
Run_the_ant 2018-01-12
  • 打赏
  • 举报
回复
使用ldap这种目录服务器,专门用于登录
林二棍子 2018-01-08
  • 打赏
  • 举报
回复
一年半以前的帖子你们还在挖坟。。。
nj_dobetter 2018-01-08
  • 打赏
  • 举报
回复
缓存技术和索引技术。 话说现在CSDN的广告和博客推荐太多了,打开页面比以前乱很多啊!!
青年卫大师 2018-01-08
  • 打赏
  • 举报
回复
[yabao=][/yabao]
  • 打赏
  • 举报
回复
引用 13 楼 HinanaiTenshi 的回复:
这种 场景提升最明显的是冷热分离,1个月内登陆次数超过1次的用户复制到0级活跃用户表,1年内登陆过超过1次的用户拆到1级活跃用户表,0级用户表建到内存上,1级用户表建到Lucene,然后用户登陆过程为-内存表-Lucene检索-数据库。
  • 打赏
  • 举报
回复
个人观点 弄两个表;最后加一个登录时间;最近一个月登录的放在一个表里面;超过的移除 这样就行了 第一次来最近的表查询,没有去第二个;oracle的话可以考虑分区等
SpringHgui 2017-12-19
  • 打赏
  • 举报
回复
1.用户id如果目前不是索引的话,加上索引应该可以解决。 2.用户id已经时索引的情况,数据多到按主键索引查询依然很慢的话,那就直接缓存+分表吧 redis将每次登陆的用户信息缓存一段时间自动过期(如一个月) 用户表按id进行模运算,分成若干子表(如模,就有n张子表,用户表数据量能减少n倍)
什么都不能 2017-12-19
  • 打赏
  • 举报
回复
有多少数据呢?数据量都大到影响登录了,不是应该把登录迁移到ldap上更合适?
yokey1219 2017-07-19
  • 打赏
  • 举报
回复
还是上贴一下大概的数据结构和数据量吧,如果数据量没有巨大,单表访问的话一般在ID列建索引就可以解决了。 如果是有多张表还做了连接查询,要看到表之间的关联设计和索引情况,才能给出合理建议。
chenyihan2017 2017-06-28
  • 打赏
  • 举报
回复
针对楼主只有少量用户访问的话。只是登录比较慢的话。 1.读写分离。显然这种情况不合适,这种设计到了数据库集群,要加数据库服务器,分一个主服务器和多个从服务器,还要运维配置,成本太高。显然不合适。 2. 优化sql语句。select * from table where update>? and userId=? 这样可以查询几天内的活跃用户,扫的数据很少。这种方法还是可行的。 3. 加redis或Memcached缓存,效果比较好,成本比较低,可以尝试一下。
hi_felix_liu 2017-06-15
  • 打赏
  • 举报
回复
引用 2 楼 autfish 的回复:
这种情况很适合加层redis缓存,经常登录的会逐渐缓存起来
缓存登陆加索引查询
DoZX 2017-06-05
  • 打赏
  • 举报
回复
缓存是要用的 10楼的建议也很棒!
引用 10 楼 zhuweisyyc 的回复:
可以根据时间条件加索引(我相信已经有了),查询的时候分两部分, 1.select * from table where update>? and userId=? 这样可以查询几天内的活跃用户,扫的数据很少 2.如果查不到,再查原始的数据。
加载更多回复(13)

25,984

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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