android - INNER JOIN 造成内存问题
问题描述
在 Android 应用程序和 SQLite 中,
INNER JOIN
在一个QUERY
创建内存问题如下:
窗口已满:请求分配 372 字节,可用空间 106 字节,窗口大小 2097152 字节
查询如下:
SELECT * FROM TABLEA A
INNER JOIN TABLEB B
ON A.ID1 = B.ID1 AND A.ID2 = B.ID2
WHERE B.DATA3 = 'Y'
表 A 由以下 4 列组成:
ID1,ID2,DATA1,DATA2:
ID1 ID2 DATA1 DATA2
A E D1 D4
B F D2 D5
C G D3 D6
D H D4 D7
表 B 由以下 3 列组成:
ID1,ID2,DATA3:
ID1 ID2 DATA3
A E Y
B F N
C G Y
D H N
QUERY结果如下:
ID1 ID2 DATA1 DATA2
A E D1 D4
C G D3 D6
关键是当我将记录数增加到数千个时,我看到了问题,并且它适用于较少的记录
还有一点是为了测试内存问题,我用了另外一个QUERY
,只从A表中取数据,不INNER JOIN
带表B,取到的记录号和上面用INNER JOIN的查询的记录号是一样的,但是没有内存问题
所以我得出的结论是 INNER JOIN 正在造成内存问题
换句话说,问题不在于记录的数量,因为QUERY
with INNER JOIN 太多了,因为我得到了很多其他QUERY
的记录而没有任何内存问题
为什么?
解决方案
来自维基百科的引述:
相反,当在大容量查询中与 SQL Where 子句中的数据库函数结合使用时,内部连接可能会导致灾难性的性能下降甚至服务器崩溃。 [2][3][4] SQL Where 子句中的函数可能导致数据库忽略相对紧凑的表索引。在使用取决于计算值的过滤器减少行数之前,数据库可能会从两个表中读取并内连接选定的列,从而导致相对大量的低效处理。
推荐阅读
- mysql - 卸载应用程序后从 mysql 数据库中删除表
- javascript - 使用 Ajax 和 Django 填充 SELECT 选项
- heroku - 我在 Heroku 上有一个严重的不和谐机器人,它不应该停止,但 1 天后它进行了完全重置
- cmd - 如何从命令输出中提取/显示任意两列及其值?
- java - 如何访问另一个类的对象
- javascript - ElectronJS:使用调用/句柄时不需要多次触发记录方法
- postgresql - 如何修复 PDOException::("SQLSTATE[08006] [7] SCRAM 身份验证需要 libpq 版本 10 或更高版本")
- html - 为什么移动设备上出现键盘时页面会向上移动?
- python - Python是如何求幂的?
- amazon-web-services - 如何正确设置 AWS 入站规则以接受来自外部 REST API 调用的响应