最近跑了个大查询,足足跑了14w秒依旧没有跑完,于是寻找了一些优化办法:
1.提升硬件、加服务器,这种烧钱的事情,我没法子咯
2.我找到了psql有个索引的功能,这个功能在表单巨大的时候,可以极高的提速!!!
--这是它的创建、删除与修改的代码
CREATE INDEX id_index on infomation(id); --创建索引,infomation是表名
DROP INDEX IF exists id_index ; --删除索引
ALTER INDEX public.ii RENAME TO id_index ; --修改索引名字
如何利用索引来查询?我一开始我以为索引应该也是这样查询的,然后就是error、error、error咯
select * from id_index
实际上索引是内置在表单的,我对它的理解是这样的,我们正常的表单是这样的,
TABEL_M
id | money |
---|---|
001 | 100 |
001 | 200 |
002 | 100 |
002 | 300 |
002 | 600 |
TABEL_S
id | sex |
---|---|
001 | 1 |
002 | 2 |
现在我们要把这两个表单链接起来,我们一般是利用left join
SELECT TM.id, TM.money, TS.sex
FROM TABEL_M TM
left join TABEL_S TS
on TM.id = TS.id
而我们现在创建给TABLE_M创建一个索引,然后打开TABEL_M ,会看到什么,似乎变化都没有!
CREATE INDEX id_index on TABEL_M (id); --创建索引,infomation是表名
TABEL_M
id | money |
---|---|
001 | 100 |
001 | 200 |
002 | 100 |
002 | 300 |
002 | 600 |
只是查看表属性的时候,会发现索引栏多了一个“id_index ”的单词,这个索引的效果,就是用一个索引去将相同id标记到一个箱子中,此时的left join就相当于left join一个索引就可以left join到这一id对应的所有数组,因此实现了提速(索引会多占一份空间,这是缺陷)
TABEL_M(ii列实际上是没有的,只是为了更直观展示)
ii | id | money |
---|---|---|
1 | 001 | 100 |
001 | 200 | |
002 | 100 | |
2 | 002 | 300 |
002 | 600 |
索引不仅仅只有一种,也不是只能对一个列进行,也可以组合索引,原理与此类似,不做赘述。