我问chatgpt, 能不能帮我优化下面的SQL:
chatgpt给我回复了下面结果:
我看了这个写法, 跟原SQL不等价,于是它又做了调整:
上面这个回答明显还是不等价,但是有求必应的chatgpt硬着头皮也要回复,于是又变成了下面这样:
我又质疑它的不等价,这次好像终于等价了,但是与原来的SQL在性能上应该是没什么区别的, 逻辑上还略显复杂:
我不想难为它了, 把我的写法给了它:
chatgpt对我的写法做了点评:
我还尝试了另外一种使用分析函数的写法:
相比之下, 前面的group by写法要略好一些(分析函数消耗内存较多).两种改写方法都只需要一次表扫描,而且去掉了union的去重操作, 比原SQL写法有明显的改进.
总结:
chatgpt能辅助做很多事情, 但是有些严谨的事情, 还是要慎重, 比如SQL改写的等价性等, 如果不具备分辨能力,很容易得出不等价的优化方法.
SQL写法对数据库性能至关重要,很多开发人员只追求实现业务逻辑,较少考虑性能问题, 数据量一旦增大, 业务执行效率快速下降,然后又把希望寄托在硬件的改善, 这些都是不可取的.