Mybatis-PageHelper icon indicating copy to clipboard operation
Mybatis-PageHelper copied to clipboard

增加SQL解析缓存,以提升性能sql parse cache

Open qxo opened this issue 1 year ago • 7 comments

之前除SqlServerDialect外,其他Dialect之前没有sql解析缓存.

优化前项目中每次此plugin的SQL解析基本在7/8到几十毫秒之间,有时比sql本身数据库执行还慢时!

经分析这个慢原因是其依赖的jsqlparser本身解析就慢,且在4.5时有反向优化(采用线程池却没每次重新线程!)
`jad net.sf.jsqlparser.parser.CCJSqlParserUtil parseStatement` 

测试发现jsqlparser 4.7和pagehelper不兼容, 4.6 和4.5有同样的问题

增加SQL解析缓存后,重复访问的耗时基本0.5毫秒以下

*需要说明的这次重构目前只在mysql下测试,其他Dialect未经测试*

qxo avatar Nov 03 '23 14:11 qxo

jsqlparser奇葩的地方是几乎每个版本都不兼容...

刚发布的6.0.0,如果4.7能解决问题,后续先考虑升级做兼容。

abel533 avatar Nov 06 '23 01:11 abel533

jsqlparser奇葩的地方是几乎每个版本都不兼容...

刚发布的6.0.0,如果4.7能解决问题,后续先考虑升级做兼容。

据我分析 jsqlparser 4.7 还是一样的问题,一样的慢

我重新提交一下了:修复排序时缓存SQL的bug

qxo avatar Nov 10 '23 12:11 qxo

项目做性能测试时压出问题来了,也是这个原因导致的。不知道这个问题有没有处理计划?

cysnb avatar Nov 17 '23 06:11 cysnb

jsqlparser奇葩的地方是几乎每个版本都不兼容...

刚发布的6.0.0,如果4.7能解决问题,后续先考虑升级做兼容。

@abel533 jsqlparser的兼容性问题可以通过将使用的版本内嵌到pagehelper解决,参见 #784

moonfruit avatar Nov 17 '23 08:11 moonfruit

当前PR暂时不要做后续处理了,会先考虑和4.7做兼容(已经接近完成)。

pagehelper avatar Nov 20 '23 07:11 pagehelper

新建了 https://github.com/pagehelper/pagehelper-sqlparser 模块,可以考虑在这个模块增加支持缓存的实现。

abel533 avatar Dec 27 '23 07:12 abel533

新建了 https://github.com/pagehelper/pagehelper-sqlparser 模块,可以考虑在这个模块增加支持缓存的实现。

没时间做代码结构调整, 有需要的请自取本PR吧:)

另外重新合并处理一下: 本PR已支持合并到当前最新master分支了 测试一下SQL解析缓存还是很有必要, 加不加相差10-20ms左右 同时验证了一下本项目和jsqlparser 4.9 也是兼容的

qxo avatar Apr 27 '24 07:04 qxo