java - 优化 SQLite 查询以使用一个查询

标签 java android performance sqlite

问题描述

我正在编写使用数据库的应用程序,它从数据库中选择一些数据并在 ListView 中将其显示给用户。从数据库中选择项目时,我必须遵守一些标准。

  1. 在数据库中我保留了一些位置(纬度和经度),在选择项目时我必须获取我当前的位置并将项目从离我较近的位置排序到较远的位置。
  2. 在数据库中,我有 TOP 公司,它们必须始终在列表中排在第一位,与其位置(纬度和经度)无关

问题

所以我需要一些查询来一次按正确的顺序选择所有这些信息,因为目前我正在使用 3 个查询来做到这一点。

当前解决方案

这是我用来选择我需要的所有信息的查询,目前我选择所有项目将它们添加到数组中,然后才根据距离在数组中对它们进行排序。

  1. 选择顶级公司

     select CompanyInfo._id, CompanyInfo.name_en, ContactInfo.telephones, ContactInfo.location, CompanyInfo.websites, ContactInfo.address_en, ContactInfo.location, ContactInfo.position, TopFirmsByCode.Level, ContactInfo.name_en from CompanyInfo, ContactInfo, TopFirmsByCode where CompanyInfo._id=TopFirmsByCode.RegNo AND CompanyInfo._id=ContactInfo._id AND TopFirmsByCode.Code = 452 order by TopFirmsByCode.Level ASC, CompanyInfo.rating_ordering_en ASC`
    
  2. 选择按距离排序的其他公司

     select CompanyInfo._id, CompanyInfo.name_en, ContactInfo.telephones,ContactInfo.location,CompanyInfo.websites,ContactInfo.address_en,ContactInfo.location, ContactInfo.position, ContactInfo.name_en from CompanyInfo, ContactInfo where CompanyInfo._id=ContactInfo._id AND CompanyInfo.category_codes LIKE %547% order by ContactInfo.location ASC
    

最佳答案

试一试:

select CompanyInfo._id, CompanyInfo.name_en, ContactInfo.telephones, 
    ContactInfo.location, CompanyInfo.websites, ContactInfo.address_en,
    ContactInfo.position, ContactInfo.name_en, TopFirmsByCode.Level,
    (case when TopFirmsByCode.Code = 452 then 1 else 0 end) as isTopFirm
from CompanyInfo
join ContactInfo on (CompanyInfo._id=ContactInfo._id)
join TopFirmsByCode on (CompanyInfo._id=TopFirmsByCode.RegNo)  
where (TopFirmsByCode.Code=452 OR CompanyInfo.category_codes LIKE %547%)
order by isTopFirm DESC, TopFirmsByCode.Level ASC, CompanyInfo.rating_ordering_en ASC

关于java - 优化 SQLite 查询以使用一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738652/

相关文章:

java - 如何根据输入字段值动态形成 SQL 查询

java - Spring Boot加载程序找不到资源

c++ - 使用大型整数对数据集有效地初始化 unordered_map

java - Oracle Java 教程 - 回答问题时可能出错

java - 你如何使两个数组在 java 中关联?

android - Android Webview 4.4.2 中的按钮单击问题

sql - 具有较小日期范围(结果集)的 PostgreSQL 查询比具有较大日期范围(结果)的查询慢

c++ - string.empty() 或 string.size() == 0 哪个更快?

java - 使用地理编码器根据纬度和经度检索地址会导致延迟。安卓

android - 如何在 Android 上设置日志文件最大大小