Sql优化技术

时间:2009-07-14 12:12:13

标签: sql android sqlite

我想了解拥有近80,000条记录的数据库的优化技术, 优化可能性列表

我在Android平台上使用我的移动项目 我使用sqlite,我花了很多时间来检索数据

由于

8 个答案:

答案 0 :(得分:9)

好吧,只有80,000条记录并且假设您的数据库设计得很好并且规范化了,只需在WHERE或ORDER BY子句中经常使用的列上添加索引即可。

您可以使用其他更复杂的技术(例如对某些表进行非规范化,分区等),但是当您有数百万条记录需要处理时,这些技术通常才开始发挥作用。

ETA:

我看到你更新了这个问题,提到这是在移动平台上 - 这可能会改变一些事情。

假设您根本无法削减数据集,您可以做的一件事就是尝试对数据库进行一些分区。这里的想法是将您的一个大表分成几个较小的相同表,每个表都包含数据的子集。

给定行中的哪些表将取决于您选择如何对其进行分区。例如,如果您有一个“customer_id”字段,范围从0到10,000,您可能会将客户0 - 2500放在table1中,2,500 - 5,000放在table2中,等等。将一个大表拆分为4个较小的表。然后,您的应用程序中会有逻辑,用于确定要查询哪些表(或多个表)以检索给定记录。

您可能希望以这样的方式对数据进行分区,即一般只需要查询其中一个分区。具体如何对数据进行分区将取决于您拥有哪些字段以及如何使用它们,但总体思路是一样的。

答案 1 :(得分:1)

  • 创建索引
  • 删除索引

  • 规格化

  • 非规范化

答案 2 :(得分:1)

这些天80k行的行数不多。具有这些索引的查询的聪明索引将为您提供正确的服务。

答案 3 :(得分:1)

了解如何显示查询执行图,然后学习理解它们的含义,然后相应地优化索引,表格和查询。

答案 4 :(得分:1)

如此广泛的主题,这取决于您想要优化的内容。但基础知识:

  • 索引。一个好的索引策略很重要,索引经常查询/排序的正确列很重要。但是,你添加的索引越多,你的INSERT和UPDATE就越慢,所以需要权衡。
  • 维护。保持索引碎片整理和统计更新
  • 优化查询。识别缓慢的查询(使用从SQL 2005开始可用的分析器/内置信息)并查看它们是否可以更有效地编写(例如,避免使用CURSOR,尽可能使用基于集合的操作
  • 参数设置/服务提供商。使用参数化SQL来查询db而不是使用硬编码搜索值的adhoc SQL。这将允许更好的执行计划缓存和重用。
  • 从规范化的数据库架构开始,然后在适当时进行反规范化以提高性能

80,000条记录并不多,所以我会停在那里(大型dbs,数百万条数据行,我建议对数据进行分区)

答案 5 :(得分:0)

你必须对你想做的事情更加具体。你的运营组合是什么?你的桌子结构是什么? 泛型建议是在适当的时候使用索引,但是你不会对这样的通用问题得到很多帮助。

此外,80,000条记录都没有。这是一个中等大小的桌子,不应该让任何像样的数据库破坏汗水。

答案 6 :(得分:0)

首先,如果你想要一个表现良好的数据库,索引真的是必需的。

除此之外,这些技术取决于您需要优化的内容:尺寸,速度,内存等?

答案 7 :(得分:0)

值得了解的一件事是,在索引字段的where语句中使用函数将导致不使用索引。

示例(Oracle):

SELECT indexed_text FROM your_table WHERE upper(indexed_text) = 'UPPERCASE TEXT';