我通过研究广泛搜索并提高了性能,但我仍然没有尽快得到结果。
我有以下SQL:
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"/>
它在1.8秒内在我的50,000行表上执行。 但是,该页面将使用不同的参数运行此查询60次。 这花了太长时间。
最初我有这个部分: u.form ='Y02GA'&amp;&amp; u.enrolled = '1'
在加入之外,需要4.20秒....我的时间减少了一半以上,但我不禁想到它仍然没有那么高效。
任何指针都感激不尽。 约翰:-)
答案 0 :(得分:0)
这是您的查询:
SELECT x.level, count(x.level) AS TOTAL
FROM (SELECT a.level
FROM gharaffa.wwlassessments a LEFT JOIN
gharaffa.`users` u
on u.`pupilID` = a.`pupilID`
WHERE a.dateAchieved = (SELECT MAX(a2.dateAchieved)
FROM gharaffa.wwlassessments a2
WHERE a.pupilID = a2.pupilID AND
a2.id = 867 AND
u.form = 'Y02GA' AND
u.enrolled = 1
)
) x
GROUP BY x.level;
此查询似乎过于复杂。请注意两个小的变化:
id
是数字)。&&
更改为AND
。后者是标准的SQL。一些观察结果:
LEFT JOIN
变为INNER JOIN
。u
上的条件应位于WHERE
的中间,而不是最里面的WHERE
。所以,我会把它写成:
SELECT a.level, COUNT(*) as TOTAL
FROM gharaffa.wwlassessments a JOIN
gharaffa.users u
ON u.pupilID = a.pupilID
WHERE u.form = 'Y02GA' AND
u.enrolled = 1 AND
a.dateAchieved = (SELECT MAX(a2.dateAchieved)
FROM gharaffa.wwlassessments a2
WHERE a.pupilID = a2.pupilID AND
a2.id = 867
)
GROUP BY a.level;
为此,您需要users(form, enrolled, pupilID)
和wwlassessments(pupilId, id, level)
上的索引。