Sql 两个请求之间保留内存的巨大差异
此请求从数据库中获取大约30 MB的内存,其中有4.5k个合适的字段Sql 两个请求之间保留内存的巨大差异,sql,Sql,此请求从数据库中获取大约30 MB的内存,其中有4.5k个合适的字段 string(60) "SELECT qr FROM App\Entity\User qr WHERE u.email LIKE :domain" 但是这个请求超过了8G的内存 string(78) "SELECT u FROM App\Entity\User qr, App\Entity\User u WHERE u.email LIKE :domain" 在查询数据库的过程中出现了这个问题,该数据库将使用某封电子邮件处
string(60) "SELECT qr FROM App\Entity\User qr WHERE u.email LIKE :domain"
但是这个请求超过了8G的内存
string(78) "SELECT u FROM App\Entity\User qr, App\Entity\User u WHERE u.email LIKE :domain"
在查询数据库的过程中出现了这个问题,该数据库将使用某封电子邮件处理所有用户,我发现问题是条令没有进行我想要的查询,问题得到了解决。然而,我想知道为什么这两个请求之间消耗的资源有如此巨大的差异
有没有合乎逻辑的答案
PS:数据库中的字段数量是4500个,每个字段都适合查询条件,因此两个查询在数据库中的少量字段上返回相同数量的用户(例如100个),但是当我实际将数量增加到4500个时,出现了这样一个问题第二个查询对自身执行
App\Entity\User
(分别是表User
)的交叉连接。这将为您提供(#行)^2行
,远远超过表中的4.5k。第二个查询还应该为第一个查询的每一行提供4.5k次(因为每个结果都与所有用户匹配)。为了进一步分析,最好了解底层数据库管理系统。在姐妹站点DBA.StackExchange.com中可以更好地询问这一问题。通过使用两个不同的别名两次添加同一个表,并且在它们之间没有连接条件,您试图实现什么目的?正如@Islingre所说的,你的方式是一种跨产品连接。Islingre给出了很好的答案,我认为这个问题可以解决,谢谢你的回答,Islingre更感谢你)