系统有个比较常用查询实在太慢了,需要优化。
本来数据量也不大的,但是由于最开始表的设计问题,再加上需求问题,查询条件分散到了各个表中,并且还是左右like,join了20+张表,导致非常慢。
自己想过的优化方式:
1.改需求,去掉一些查询条件,适当的增加一些数据冗余,不过这样不行,系统跑了两年,去掉查询条件不现实。
2.优化表,但是由于条件实在太分散了,增加的数据也挺多的,而且还涉及到工作流,工作流的节点也要冗余,这样并且觉得这样效率并不高,实现起来也很有难度,所以也排除。
3.改sql,里面的sql查询已经是很复杂了,都快看不懂了,再加上查询条件都是左右like通过关键字的形式去查找,也改不动!
4.通过使用第三方插件,像ES这种,在查询的时候转发到查询服务,这样就可以不用动以前的表,也不用在表里增加冗余数据。而且这个插件使用起来貌似也不难(看了一些demo,单单本地测试,用起来没问题)。
相对来说,这是最方便也是最稳妥的实现方式,但是考虑到环境不一样,到时候会不会出问题,我自己也是第一次使用es,然后有点担心,请教一下英雄好汉 ,哈哈,看看怎么说。
现在的应用环境:
bs架构,服务端三台服务器搞了个集群,nginx做转发,redis做缓存,mongo做文件服务器,数据库用的mysql。
springboot2.0.3 对应的es打算用5.0.0。
目前大概知道es,要做好日志跟data的数据路径修改,想来备份应该是不用的叭。
如果查询服务宕机,再转到以前的查询接口。
现在不知道es如果按照现在我了解的使用还会有哪些坑,请教一下啦~
谢谢~
建议外键关联的字段建立索引。
es没用过。
优化sql:where条件,大条件放在前面,不要用或者少用group by、order by。