从数据库查询大量数据效率太低

现在在做一个背记英语单词的项目,使用的是mysql数据库,单词记录有一万五千多条,用户学习单词时要根据record记录表(包含用户id和单词id)查询出所有用户未学习过的单词和已学习过的单词。有两个功能需要实现,一个是展示10个用户没有学习过的单词,另一个是展示用户学习过的单词和未学习过的单词各5个。因为数据库中单词记录较多,到需要展示的时候再去查询就需要等好几秒,用户体验极差。该怎样去提高用户体验呢?我自己的解决方案是:因为查询单词必须用到用户id,所以不能在服务器启动的时候去查询数据,我是在用户登录成功跳转到主页之前将用户学习过的单词和未学习过的单词查询出来保存到两个List集合中(当然,这里查询的单词只是查出单词id而已),然后将两个集合保存到session域中,需要用到的时候直接取出就可以。这个方案存在两个很大的问题:一,登录时间延长了好几秒,用户体验差;二,将两个集合保存到session域中,虽然我也不知道会不会出什么问题,但总感觉不好(知道的还烦请指教一下)。各位有没有什么比较好的解决方案,还望不吝赐教

直接查出10条 不查全部可以不,如果你把1万5的记录都缓存起来,用户一多内存就炸了

你的这种情况其实和搜索引擎搜索词条很像,百度的实时搜索技术,你尝试下用百度搜索东西,基本上问题没输完页面就出来了,如果你想用户体验好,也可以用百度谷歌这方面的搜索技术,他们是搜索一大堆网页,相信你这个用上实时搜索技术会让用户体验秒增,看看百度翻译怎么做的?百度翻译这边输入英文,中文立马出现,肯定是实时搜索技术。
希望给分,思考了好久时间,图片说明

没细看你的文字;15000条数据就慢,如果并发量不大,应该是数据库设计不合理造成的;
如何优化呢?
1,加索引;
2,减少使用 like,mysql函数;
3,优化sql,查询需要的列,用explain进行分析;

还不到应用层加缓存的时候;
如果非要加,我建议使用redis处理,绝对赞;

先加下索引,然后优化下查询算法

YY下
1.首先单词库放客户端
2.15000个单词,
单词id假设从1开始, 为了标识用户的学习进度, 可以使用二进制流,
如果按bitmap的思想存储, 每个用户的学习进度大概要2000个字节, 绝大多数用户学不完这些单词,所以可以先简单分成多个字段, 比如分4个字段, 每个字段512个字节, 查学完的从第1个字段到第四个字段, 查没学完的从第四个字段到第一个字段.
3.客户端同步学习进度给后台, 后台更新数据库
4.客户端登陆时,拉取进度串,客户端负责解析出哪些学完

使用transaction批量查找,会快最多10倍

需要一个好的算法支持你的软件