第9章 数据库索引
索引只不过是表中一列或者多列之上经过组织之后的值列表。其思路是假设在如下的情况下:用户仅仅想要去获取该表当中所有数据行的某种子集,那么就可以通过一个使用索引的查询来确定与之相匹配的数据行,而不是去检查所有的数据行。由于索引会对其所涉及的数据列进行排序的操作,因此索引也可以被用于处理那些需要对表中的部分数据进行排序后并返回数值的情况之下,以便加速整个查询的执行时间。
对于一个数据库来说,索引有助于降低执行一个查询所需要查找数据的数量。在对查询执行过程不了解的情况下,很难用文字来描述什么是索引,反之,在不了解索引是如何运作的情况下去谈论一个查询的执行也是不切实际的。在本章中,将会通过一个简单的查询示例,尝试去打破这种解释上的僵局。同时,与之相关的查询计划即使是在不具备下一章中所涉及到的查询优化调整的内容背景之下,也具有一定的意义。
不应当依赖索引来强制对查询进行排序。如果需要查询结果按照某种特定的方式进行排序的话,大可以在查询中使用ORDER BY
关键字来达到期望的效果。按照某种排序方式的索引的存在在更大程度上是取决于该查询所被选定的执行方式,因为它将略过排序的步骤继续执行。并不能仅仅因为一个查询由于正常地使用了一个恰巧在此时能够按照所需的排序方式输出结果的索引,从此就认定该查询将会一直以该方式进行输出。查询计划将会随着时间的改变而变化,以便最大程度上去满足那些基本的数据,因为这些基础数据也会经常发生变化。
本章将会为大家介绍一个主要的新事物,那就是如果在SELECT
语句之前添加EXPLAIN ANALYZE
关键字后,数据库将为用户展示该查询执行过程当中会采用多少预期的操作以及实际所执行操作的数量。关于如何去阅读EXPLAIN语句的输出将会在下一章当中详细讲述。当阅读完第10章有关查询优化的内容之后,再回过头来重新审视本章的内容将会有更多的发现。 ...
Get PostgreSQL 9.0性能调校 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.