Page 83 - 6430
P. 83

11.  ПРИНЦИПИ СТВОРЕННЯ ЗАПИТІВ ДО БАЗ

                            ГЕОДАНИХ. СТВОРЕННЯ ПРОСТОРОВИХ
                          ЗАПИТІВ НА МОВІ SQL. ОСНОВНІ ФУНКЦІЇ

                                             СТАНДАРТУ OPENGIS


                           Сенс  функціональності  просторових  баз  даних  полягає  у
                  виконанні  запитів  до  бази  даних,  для  яких  інакше  б  потрібна
                  настільна ГІС. Ефективне використання PostGIS вимагає знання

                  доступних просторових функцій і вміння створювати індекси, що
                  забезпечують ефективну роботу.
                           Конструюючи  запит  важливо  пам'ятати,  що  тільки

                  оператори працюють з охопленням (bounding-box-based), типу &
                  &  можуть  використовувати  просторові  індекси  GiST.  Такі
                  функції,  як  distance  ()  не  можуть  використовувати  індекс  для
                  оптимізації  своїх  операцій.  Наприклад,  наступний  запит  був  би

                  дуже повільним на великій таблиці:
                           SELECT the_geom
                           FROM geom_table

                           WHERE  ST_Distance  (the_geom,  GeomFromText  ('POINT
                  (100000 200000)', -1)) <100
                           Цей  запит  вибирає  все  геометрії  з  geom_table,  які

                  знаходяться на відстані в 100 одиниць від точки (100000, 200000).
                  Він  буде  виконуватися  повільно,  тому  що  веде  за  собою
                  обчислення  відстаней  між  кожною  точкою  в  таблиці  і  нашою

                  точкою, тобто одне обчислення ST_Distance () для кожного рядка
                  таблиці. Ми можемо уникнути цього за допомогою оператора &
                  &, що зменшує число необхідних обчислень:
                           SELECT the_geom

                           FROM geom_table
                           WHERE  the_geom  &  &  'BOX3D  (90900  190900,  100100
                  200100)':: box3d

                             AND
                           ST_Distance  (the_geom,  GeomFromText  ('POINT  (100000
                  200000)', -1)) <100


                           Цей  запит  вибирає  те-ж  геометрії,  але  робить  це  більш
                  ефективно.  За  умови,  що  для  the_geom  існує  індекс  GiST,
                  планувальник  буде  вважати,  що  використання  цього  індексу


                                                              83
   78   79   80   81   82   83   84   85   86   87   88