Android SQLite的查询优化(一)

http://www.eoeandroid.com/thread-83601-1-1.html

 SQLite是个典型的嵌入式DBMS,它有很多优点,它是轻量级的,在编译之后很小,其中一个原因就是在查询优化方面比较简单,它只是运用索引机制来进行优化的,经过对SQLite的查询优化的分析以及对源代码的研究,我将SQLite的查询优总结如下:

        一、影响查询性能的因素:

        1. 对表中行的检索数目,越小越好
        2. 排序与否。
        3. 是否要对一个索引。
        4. 查询语句的形式

        二、几个查询优化的转换

        1. 对于单个表的单个列而言,如果都有形如T.C=expr这样的子句,并且都是用OR操作符连接起来,形如: x = expr1 OR expr2 = x OR x = expr3 此时由于对于OR,在SQLite中不能利用索引来优化,所以可以将它转换成带有IN操作符的子句:x IN(expr1,expr2,expr3)这样就可以用索引进行优化,效果很明显,但是如果在都没有索引的情况下OR语句执行效率会稍优于IN语句的效率。

         2. 如果一个子句的操作符是BETWEEN,在SQLite中同样不能用索引进行优化,所以也要进行相应的等价转换: 如:a BETWEEN b AND c可以转换成:(a BETWEEN b AND c) AND (a>=b) AND (a<=c)。 在上面这个子句中, (a>=b) AND (a<=c)将被设为dynamic且是(a BETWEEN b AND c)的子句,那么如果BETWEEN语句已经编码,那么子句就忽略不计,如果存在可利用的index使得子句已经满足条件,那么父句则被忽略。

         3. 如果一个单元的操作符是LIKE,那么将做下面的转换:x LIKE ‘abc%’,转换成:x>=‘abc’ AND x<‘abd’。因为在SQLite中的LIKE是不能用索引进行优化的,所以如果存在索引的话,则转换后和不转换相差很远,因为对LIKE不起作用,但如果不存在索引,那么LIKE在效率方面也还是比不上转换后的效率的。

         三、 几种查询语句的处理(复合查询)

         1.查询语句为:<SelectA> <operator> <selectB> ORDER BY <orderbylist> ORDER BY 执行方法: is one of UNION ALL, UNION, EXCEPT, or INTERSECT. 这个语句的执行过程是先将selectA和selectB执行并且排序,再对两个结果扫描处理,对上面四种操作是不同的,将执行过程分成七个子过程:

         outA: 将selectA的结果的一行放到最终结果集中

         outB: 将selectA的结果的一行放到最终结果集中(只有UNION操作和UNION ALL操作,其它操作都不放入最终结果集中)

          AltB: 当selectA的当前记录小于selectB的当前记录
          AeqB: 当selectA的当前记录等于selectB的当前记录
          AgtB: 当selectA的当前记录大于selectB的当前记录
          EofA: 当selectA的结果遍历完
          EofB: 当selectB的结果遍历完

          下面就是四种操作的执行过程:

java代码:

  1. UNION ALL
  2. UNION
  3. EXCEPT
  4. INTERSECT
  5. AltB:
  6. outA, nextA
  7. outA, nextA
  8. outA,nextA
  9. nextA
  10. AeqB:
  11. outA, nextA
  12. nextA
  13. nextA
  14. outA, nextA
  15. AgtB:
  16. outB, nextB
  17. outB, nextB
  18. nextB
  19. nextB
  20. EofA:
  21. outB, nextB
  22. outB, nextB
  23. halt
  24. halt
  25. EofB:
  26. outA, nextA
  27. outA, nextA
  28. outA,nextA
  29. halt
复制代码

       2. 如果可能的话,可以把一个用到GROUP BY查询的语句转换成DISTINCT语句来查询,因为GROUP BY有时候可能会用到index,而对于DISTINCT都不会用到索引的 。


系列之Android SQLite的查询优化(二) 的帖子链接 http://www.eoeandroid.com/thread-83603-1-1.html
系列之Android SQLite的查询优化(三) 的帖子链接 http://www.eoeandroid.com/thread-83610-1-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android SQLiteStudio是一个Android平台上的数据库管理工具,主要用于管理和操作SQLite数据库。 首先,SQLite是一个轻型的数据库引擎,它被广泛应用于Android平台上的应用程序开发。而SQLiteStudio则是一个用于管理SQLite数据库的可视化工具。通过SQLiteStudio,开发者可以方便地创建、修改和维护数据库表结构以及数据记录。 在Android应用开发过程中,使用SQLiteStudio可以帮助开发者更好地管理应用程序的数据库。例如,开发者可以通过SQLiteStudio创建数据库表,定义表的字段以及字段的数据类型。创建完毕后,开发者可以使用SQLiteStudio插入、更新和删除数据记录,还可以执行查询操作以检索数据库中的数据。 另外,SQLiteStudio也提供了一些高级功能,如索引、触发器和视图的管理。通过这些功能,开发者可以优化数据库的性能和查询效率,提高应用程序的响应速度和用户体验。 总之,Android SQLiteStudio是Android平台上的一款实用工具,它可以帮助开发者更好地管理和操作SQLite数据库。通过SQLiteStudio,开发者可以轻松创建、修改和维护数据库表结构以及数据记录,同时还可以使用高级功能优化数据库性能。 ### 回答2: Android SQLiteStudio是一个用于管理和操作SQLite数据库的开源软件。它提供了一个直观的图形用户界面(GUI),使用户能够轻松地创建、编辑和删除数据库、表格和数据。 使用Android SQLiteStudio,您可以执行各种数据库操作,如创建新数据库、导入和导出数据、编辑表格和数据行等。该软件提供了一个简单而强大的用户界面,使您能够轻松地进行这些操作,而无需编写复杂的SQL语句。 此外,Android SQLiteStudio还具有数据查看和过滤功能,以帮助用户更好地理解和分析数据库中的数据。您可以轻松地浏览和搜索数据库中的数据,并使用过滤器来查找特定的数据行。 Android SQLiteStudio还提供了一个强大的查询编辑器,让用户可以编写和执行复杂的SQL查询。您可以自定义查询的条件、排序和列,并立即看到结果。该软件还提供了一些常用的查询功能,如联接、聚合和分组。 总的来说,Android SQLiteStudio是一个简单而强大的工具,用于管理和操作SQLite数据库。它提供了一个直观的用户界面,使用户能够轻松地进行各种数据库操作,如创建、编辑和删除数据库、表格和数据。它还具有数据查看和查询编辑器的功能,使用户能够更好地理解和分析数据库中的数据。 ### 回答3: Android SQLitestudio是一个功能强大的数据库管理工具,用于管理和操作SQLite数据库。它可以在Android设备上直接运行,提供了简单直观的界面和多种功能,使得开发者可以更轻松地管理和查询数据库。 首先,SQLitestudio提供了一个直观的图形界面,使得用户可以通过简单的点击和拖动操作来管理数据库。用户可以轻松地创建、编辑和删除表格、字段和索引,而不需要编写复杂的SQL语句。此外,SQLitestudio还提供了丰富的模板和向导,帮助用户快速创建数据库结构。 其次,SQLitestudio具有强大的查询功能,允许用户轻松执行各种复杂的SQL查询。用户可以使用SQL编辑器编写和调试SQL语句,然后通过查询结果窗口查看查询结果。此外,SQLitestudio还提供了查询构建器,帮助用户快速构建常见的查询语句,减少了错误和繁琐的工作。 此外,SQLitestudio还提供了数据导入和导出功能,用户可以将数据从其他数据库导入到SQLite数据库中,或者将SQLite数据库导出到其他格式(如CSV、JSON等)。这种灵活性和互操作性使得开发者可以更好地与其他数据库和数据源进行集成。 最后,SQLitestudio还支持批量操作和数据编辑。用户可以一次性插入、更新或删除多行数据,而不需要手动编写和执行多个SQL语句。此外,SQLitestudio还提供了直接编辑数据的功能,用户可以直接在表格中编辑和更新数据,而不需要编写和执行SQL语句。 综上所述,Android SQLitestudio是一个强大的数据库管理工具,提供了直观的界面、丰富的功能和强大的查询能力。它方便了开发者管理和操作SQLite数据库,在Android开发中起到了重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值