我有一个包含子查询的查询,该子查询总是导致一个非常大的表的SCAN导致查询时间很短.
这是我正在使用的查询:
SELECT PersonId
FROM person
WHERE PersonId IN (
SELECT PersonId
FROM relationship
WHERE RelatedToPersonId = 12270351721
);
Run Code Online (Sandbox Code Playgroud)
查询计划报告为:
SCAN TABLE person (~100000 rows)
EXECUTE LIST SUBQUERY 1
SEARCH TABLE relationship USING INDEX relationship_RelatedToPersonId_IDX (RelatedToPersonId=?) (~10 rows)
Run Code Online (Sandbox Code Playgroud)
具有静态列表的相同查询(相当于子查询的结果):
SELECT PersonId
FROM person
WHERE PersonId IN (12270351727,12270351730,12270367969,12387741400);
Run Code Online (Sandbox Code Playgroud)
以及查询计划:
SEARCH TABLE person USING COVERING INDEX sqlite_autoindex_person_1 (PersonId=?) (~5 rows)
EXECUTE LIST SUBQUERY 1
Run Code Online (Sandbox Code Playgroud)
如果第二个查询没有,为什么第一个查询会提示扫描?
我有一个相机应用程序,根据我的布局特征(主要是宽高比)选择预览大小,然后根据其他约束(最小尺寸)选择图片大小.这通常会导致图片的宽高比与预览不同.
这本身不是问题,但我需要将预览中的矩形映射到图片上的等效矩形,以便我可以提取拍摄照片时预览中可见的最终照片的相同区域.
我知道有不同的宽高比意味着将会有一些矩形的部分没有重叠,但我的工作距离不够近,这应该是一个问题.
如果无法直接了解预览和照片地图的方式,是否有可能确定它们如何映射到本机相机?如果我能以编程方式检测本机相机宽高比,我可能能够确定裁剪方案.