Iphone 关于编写最佳SQL数据库查询的阅读材料

Iphone 关于编写最佳SQL数据库查询的阅读材料,iphone,sql,sqlite,performance,Iphone,Sql,Sqlite,Performance,我不知道我的数据库查询是否干净、高效等等。充其量,我可以从数据库中得到我需要的东西,但其他的就不多了 我应该读什么书(或网站)才能继续前进?我想知道可能进入查询的各种条件和关键字的性能成本(例如,JOIN,IN,WHERE,等等) 我在iOS设备上使用SQLite。有关SQLite和/或iOS的具体帮助,这里有些参考资料似乎有很好的建议 这本书得到了很高的评价,尽管它花了很多时间讨论数据库设计,而您可能不需要这些 还有一本全新的书,尚未出版,似乎也很有用: 现在,更一般地说,要真正为

我不知道我的数据库查询是否干净、高效等等。充其量,我可以从数据库中得到我需要的东西,但其他的就不多了

我应该读什么书(或网站)才能继续前进?我想知道可能进入查询的各种条件和关键字的性能成本(例如,
JOIN
IN
WHERE
,等等)


我在iOS设备上使用SQLite。

有关SQLite和/或iOS的具体帮助,这里有些参考资料似乎有很好的建议

  • 这本书得到了很高的评价,尽管它花了很多时间讨论数据库设计,而您可能不需要这些
  • 还有一本全新的书,尚未出版,似乎也很有用:
现在,更一般地说,要真正为任何企业数据库系统进行性能调优,我认为您需要了解以下几个方面:

  • 您正在使用的系统的基本逻辑数据存储体系结构。例如,b-tree、区段、页面、它们的大小和配置、一次读取的数据量、行的最大大小(如果这是DBMS中的问题)、如何处理行外数据(如果这是DBMS中的问题,请再次说明)

  • 表和行数据的索引、约束和基本顺序:这些索引的堆、聚集、非聚集、唯一和非唯一性、主键、唯一约束和包含列。在所有这些索引中,无论是否允许空值,只允许一个空值,还是不允许空值。唯一化者。覆盖指数

  • SARGability(查找SARG,是“搜索参数”的缩写)

  • 外键、默认值、级联删除/更新、它们对插入和删除的影响

  • 空值是否需要任何存储空间,以及这是否受列位置的影响。存储每个数据类型所需的字节数。存储或不存储字符串数据类型的尾随空格时。压缩与非压缩数据类型(例如,浮点和十进制与整数)。聚集索引和非聚集索引中每页行数(或磁盘读取的最小单位)的概念

  • 填充因子、碎片、统计信息、索引选择性、页面分割、转发指针

  • 当“批处理”一个操作可以提高性能时,为什么,以及如何最有效地执行

  • 内连接、左连接、右连接、全连接和交叉连接。半联接(存在)和反半联接(不存在)。任何其他特定于语言的语法,如mySql中使用的语法和SQL Server中的交叉应用/外部应用。在外部联接的ON子句中放置联接条件与在WHERE子句中放置联接条件的效果

  • 独立子查询、相关子查询、派生表、公共表表达式、存在和不存在的理解通常会引入相关子查询,但在执行计划中通常被视为联接(半联接或反半联接)

  • 以图形或文本形式查看和理解执行计划。查看整个SQL批处理或单个语句使用的CPU、读取、写入和持续时间的统计信息/配置文件。了解执行计划和概要文件的局限性,这实际上意味着您通常必须同时使用这两者来优化。缓存和重用执行计划,缓存中的计划过期。参数嗅探和参数化。与这些相关的动态SQL

  • 将数据类型转换为其他数据类型或仅处理这些数据类型的相对成本。(例如,一条可靠的经验法则是使用字符串比使用数字成本更高。)

  • 与基于集合的处理相比,逐行处理的成本通常过高。游标的正确用法(虽然有时需要,但很少见)。函数如何隐藏执行计划成本。编写函数是一个诱人的陷阱,当问题可以在集合中解决时,每一行都会被调用(尽管这可能很难学习如何查看,特别是因为传统的应用程序编程往往会训练人们按照这样的函数进行思考)

  • 搜索、扫描、范围扫描、“跳过”扫描。书签查找也称为索引查找,然后使用在索引查找中找到的值对同一个表进行表查找。循环、合并和散列联接。渴望和懒惰的线轴。加入秩序。估计行数。实际行数

  • 当查询太大,应使用临时表或其他方式拆分为多个查询时

  • 多处理器功能以及并行执行的好处和收获

  • Tempdb或其他临时文件使用。临时表、表变量的生存期和范围(如果您的DB引擎有)。是否收集这些的统计信息(在SQL Server临时表中使用统计信息,而表变量不使用)

  • 锁、锁粒度、锁类型、锁升级、块、死锁。数据访问模式(例如先更新、第二次插入、最后删除)。意向锁、共享锁、独占锁。锁定提示(例如,在SQL Server UPDLOCK、HOLDLOCK、READPAST、TABLOCKX中)

  • 事务和事务隔离。读已提交,读未提交,可重复读,可序列化,快照,其他我现在不记得了

  • 数据文件、文件组、独立磁盘、事务日志、简单恢复、完全恢复、最早的打开事务(也称为最小日志序列号(LSN))、文件增长

  • 序列、数组、列表、标识列、窗口函数、TOP/rownum/限制返回的行数

  • 物化视图也称为索引视图。计算列

  • 1对1,1对0或1,1对多,多对多

  • 并集、全部并集和其他“垂直”联接。SQL Server已将EXCEPT和INTERSECT添加到