![]() |
1
10
对于sqlite和/或ios的特定帮助,这里有一些资源似乎有很好的建议。
现在,更一般地说,要真正为任何企业数据库系统进行性能调整,我认为您需要了解以下重要方面:
其中大多数与绩效有关。有些对性能不太重要,但是(在我看来)如果您想成为一个优秀的SQL开发人员,那么这就很重要了,因为仅仅拥有快速查询还不够,它们还需要正确,并且善待他人,并正确地处理错误。如果您继续专业地编写SQL并希望改进,那么您最终将需要了解其中的大部分内容。我将从了解表组织、索引、查找和扫描以及哈希/合并/循环联接开始。我不太了解sqlite,但这些东西对于任何DBMS都是全局的。 有一件事可以帮你很大的忙,那就是确认查询包括搜索数据,就像在一本大电话簿或一系列电话簿的背面有各种索引一样,你可以查找姓名、地址、电话号码和其他信息。也许有一个反向的电话号码索引或者一个按名字组织的索引。考虑从这些物理对象获取信息的最少工作/最短时间路径将有助于您了解查询引擎在选择执行计划时的任务。这种理解可以帮助你说“等一下,为什么它要在扫描时进行搜索?”那张表很大,在X上有一个索引!” 示例场景:您有一个电话簿,按姓氏按惯例组织。后面还有一个索引,只有名字和姓氏,按名字排序。 任务1:你需要写下每个人的电话号码,名字是托尔斯坦。最佳计划:在名字索引中查找5个人的姓氏,然后在主电话簿中查找这些姓氏。您刚刚使用书签查找对聚集索引执行了非聚集索引查找。 任务2:你需要记下每个名字以a开头的人的所有电话号码。很快意识到甚至连名字索引都没有意义,你转到主电话簿,从第1页开始阅读每一页。你刚刚扫描了一张桌子。 为这两个任务选择一个好的“执行计划”(这正是我们刚刚做的)所固有的是您所拥有的一些领域知识:您知道Torstein是一个非常罕见的名字,而且可能有数万人的名字以a开头。这个领域知识相当于统计数据为查询引擎提供的信息。e.如果没有统计数据,可以选择一个糟糕的执行计划。 虽然这些一般性的提示可能并不都适用于iPhone上的sqlite,但是让这些概念在您的头脑中变得真正可靠对于使用sqlite数据库有很大的帮助。有一些原则必然是全局的,不管您使用的是什么系统(例如,理解索引永远不会是浪费的工作,因为任何没有索引的系统都可能不值得使用)。 我希望这有帮助。请随时要求澄清任何问题。如果你找不到资源,问我,我看看能给你指什么。 |
![]() |
Community wiki · SQL语法新手 1 年前 |
|
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |