在加压测试数据时遇到rand()函数导致查询出多个结果的情况或者没有结果的情况,sql如下:
select distinct order_code from cl_order where id=ceiling(rand()*100000)
即使使用了distinct也无济于事的多条,或者根本没有数据
具体原因并没有找到,但是在网络上找到了解决方法:
select order_code from cl_order order by rand() limit 1
使用rand()进行排序,然后取第一个,这种方式确实可以解决之前的多条查询结果或空结果的问题,但是不要在代码逻辑循环和存储过程的循环中使用,频繁的排序非常消耗性能。
推测是sql在进行语法解析和执行计划优化的时候发生了什么操作,导致了此种现象。