查询机能:
- postgres=# select * from ff(point (0,0) , 5, 10000000) as t(id int, info text, crt_time timestamp, pos point, c1 int, c2 int, c3 int, dist float8);
- id | info | crt_time | pos | c1 | c2 | c3 | dist
- ---------+----------------------------------+----------------------------+----------------------------------------+------+------+-----+-------------------
- 1850387 | 6e0011c6db76075edd2aa7f81ec94129 | 2017-07-22 17:59:38.243091 | (0.0168232340365648,0.420973123982549) | 100 | 4395 | 321 | 0.421309141034319
- 1989439 | 6211907ac254a4a3ca54f90822a2095e | 2017-07-22 17:59:38.551637 | (0.0274275150150061,0.490507003851235) | 1850 | 5 | 74 | 0.49127323294376
- 1444244 | 41bf6f8e4b89458c13fb408a7db05284 | 2017-07-22 17:59:37.339594 | (0.52773853763938,2.16670122463256) | 1 | 2470 | 820 | 2.23004532710301
- 542633 | c422d6137f9111d5c2dc723b40c7023f | 2017-07-22 17:59:35.334278 | (0.0631888210773468,2.2334903664887) | 4968 | 3 | 245 | 2.23438404136508
- 291950 | 1c2901689ab1eb7653d8ad972f7aa376 | 2017-07-22 17:59:34.776808 | (2.5384977646172,1.09820357523859) | 3 | 2131 | 360 | 2.76586731309247
- 1361182 | 7c4c1c208c2b2b21f00772c43955d238 | 2017-07-22 17:59:37.155127 | (1.7334086727351,2.18367457855493) | 9742 | 0 | 232 | 2.78803520274409
- 2267673 | 898fdd54dcc5b14c27cf1c8b9afe2471 | 2017-07-22 17:59:39.170035 | (0.394239127635956,2.86229319870472) | 2892 | 6 | 917 | 2.88931598221975
- 459345 | 9e46548f29d914019ce53a589be8ebac | 2017-07-22 17:59:35.148699 | (0.715781506150961,3.1486327573657) | 1 | 1276 | 8 | 3.22896754478952
- 570570 | fc57bfc6b7781d89b17c90417bd306f7 | 2017-07-22 17:59:35.39653 | (3.14926156774163,1.04107855819166) | 88 | 2560 | 561 | 3.31688000783581
- 1004806 | afe9f88cbebf615a7ae5f41180c4b33f | 2017-07-22 17:59:36.362027 | (1.13972157239914,3.28763140831143) | 3 | 1639 | 208 | 3.47958123047986
- 865508 | 34509c7f7640afaf288a5e1d38199701 | 2017-07-22 17:59:36.052573 | (3.12869547866285,2.34822122845799) | 2 | 65 | 875 | 3.91188935630676
- 104558 | c4699c933d4e2d2a10d828c4ff0b3362 | 2017-07-22 17:59:34.362508 | (4.20534582808614,2.43749532848597) | 99 | 4858 | 543 | 4.86069100130757
- 1069986 | 6b9f27bfde993fb0bae3336ac010af7a | 2017-07-22 17:59:36.507775 | (4.51995821669698,2.08761331625283) | 2 | 200 | 355 | 4.97877009299311
- (13 rows)
- Time: 0.592 ms
太棒了!查询时刻从200毫秒镌汰到1毫秒以内。
优化要领综述
优化要领回首:
1. 为差异的数据范例构建差异的索引。
譬喻,对空间行使GiST或SP-GiST索引,对时刻行使B树或BRIN索引,对多个工具属性行使GIN索引。索引的目标是缩小数据扫描的范畴。
2. 要领五提到数据分区。
数据分区的目标是故意地组织数据,这意味着故意地组织数据以满意搜刮需求。譬喻,假如时刻是必须的查询前提或民众查询前提,那么可以定时刻(分区)支解数据,以镌汰必要扫描的数据量。
3. 要领六描写了索引分区。
目标相同于要领五。要领五和要领六的区别在于分区在索引级别行使,因此当执行索引扫描时,数据掷中率会直接进步。
4.要领七中的ctid归并扫描相同于PostgreSQL中的多索引bitmapAnd或bitmapOr扫描。
bitmapAnd/bitmapOr跳过不必要扫描的块,要领七中的ctid归并扫描跳过不必要扫描的行。
归并从多个索引扫描得到的ctid。跳过不必要扫描的行数。
假如当其他前提为“AND”时,过滤前提可以明显镌汰ctid(记录),则没有须要行使ctid归并扫描。相反,行使FILTER作为另一个前提。(这将略微增进CPU开销。)
5. 最好的工夫老是以最大的机动性、自由和对每一个举措的无穷想象为特性。
PostgreSQL实现多索引BitmapAnd或BitmapOr扫描,明显进步了多种前提(索引)下的数据掷中率。 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|