1 索引建立常用原则

 高离散度:表的某个字段值得离散度越高,该字段越适合选作索引的关键字。

内存占用少:占用存储空间少的字段更适合选作索引的关键字

最左前缀原则

经常修改的不适合做索引

2 索引失效

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

2.对于多列索引,不满足最佳左前

3.like查询是以%开头

4.如果使用全表扫描要比使用索引快,则不使用索引

5.数据类型出现隐式转换

3 索引的建立是需要开辟额外的空间,目前大部分索引使用的是B+树,数据的删除和更新都会B+树做一个调整,增加了维护性能,索引的建立必须要考虑其本身的开销。

4 PG数据库常见执行:

1 Seq 扫描:     按照表的记录的排列顺序从头到尾依次检索扫描,每次扫描要取到所有的记录。

2 Index Scan     对于给定的查询,我们先扫描一遍索引,从索引中找到符合要求的记录的位置(指针),再定位到表去取。等于是两次I/O,先走索引,再走取表记录。

3 Bitmap Heap Scan     普通的索引扫描( index scan)一次只读一条索引项,那么一个 PAGE 面有可能被多次访问;而 bitmap scan 一次性将满足条件的索引项全部取出,并在内存中进行排序, 然后根据取出的索引项访问表数据。

4 index only scan       所包含的字段集合,囊括了我们查询语句中的字段,这样,提取出相应的index ,就不必再次提取数据块了

5 小结

1 当查询的数据量较大时候,走索引查询比全表扫描效率低,此时会走全表扫描   一般低于20%会走索引,20~40 可能索引 ,40%一般不会走索引

2 在进行过滤查询时,严格按照最佳左前要求

3 在针对多个索引选择的时候,PGSQL 有一套算法去计算花费值,判断走哪个索引会消耗最