我有此bean /表“ Userinfo”,其中包含列ID,用户名和twitchChannel。
对于大多数userinfo,twitchChannel列将为null。我正在遍历表中的每个userinfo实体,并搜索twitchChannel列,如果该列不为null,则将twitchChannel放入数组中。
这是我的要求:
"SELECT ui FROM Userinfo ui WHERE ui.iduserinfo=:id"
这是非常低效的,因为我要遍历每个实体,即使那些twitchChannel为空的实体,我也不会对这些实体感兴趣。
这是Java,但我注释了每一行,因此对于不了解它的人来说很容易理解。
while (true) { // I'm going through the table in an infinite loop
int id = 0; //id that is incremented for searches
Userinfo ui; // this will be an object that will hold the result of my query
do {
ui = ups.getUserInfo(id); // this execute the query I posted above
id++; //incrementing id for next search
if (ui.getTwitch() != null) { // if the search didn't return null
twitchChannels.add(ui.getTwitch()); // put my twitch in an array
}
} while (ui != null);
}
因此,目前,我要遍历表中的每个实体,包括那些抽动无效的实体。据我了解,可以通过索引来加速该过程。
CREATE INDEX twitchChannel
ON Userinfo (twitchChannel)
因此,类似的东西将有一个不为空的twitchChannel的表。我如何像上面那样遍历这张桌子?
它与Java持久性能否以相同的方式工作?
最佳答案
将查询更改为:
SELECT ui
FROM Userinfo ui
WHERE twitchChannel IS NOT NULL
这将受益于
Userinfo(twitchChannel)
上的索引(假设实际上填写的值很少)。至少,这将减少从数据库传递到应用程序的数据量,即使不使用索引也是如此。关于java - 我可以使用索引使此请求更有效吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30942975/