- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
MySQL: руководство профессионала - Алексей Паутов
Шрифт:
Интервал:
Закладка:
Две конфигурации пересекаются.
Их пересечение приводит к геометрии, которая имеет размерность, которая на единицу меньше, чем максимальная размерность двух данных конфигураций.
Их пересечение не равно любой из двух данных конфигураций.
Disjoint(g1,g2)
Возвращается 1 или 0, чтобы указать, является ли g1 пространственно непересекающейся с g2.
Distance(g1,g2)
Возвращает как число двойной точности самое короткое расстояние между любыми двумя точками в двух конфигурациях.
Equals(g1,g2)
Возвращает 1 или 0, чтобы указать, является ли g1 пространственно равной g2.
Intersects(g1,g2)
Возвращает 1 или 0, чтобы указать, пересекает ли g1 пространственно g2.
Overlaps(g1,g2)
Возвращает 1 или 0, чтобы указать, накладывается ли g1 пространственно на g2. Термин "пространственно накладывается" используется, если две конфигурации пересекаются, и их пересечение приводит к геометрии той же самой размерности, но не равной любой из данных конфигураций.
Related(g1,g2,pattern_matrix )
Возвращает 1 или 0, чтобы указать, существует ли пространственная связь, определенная pattern_matrix между g1 и g2. Возвращает 1, если параметры NULL. Матрица образцов является строкой. Спецификация будет отмечена здесь, если эта функция выполнена.
Touches(g1,g2)
Возвращается 1 или 0, чтобы указать, касается ли g1 пространственно g2. Две конфигурации пространственно касаются, если внутренности конфигураций не пересекаются, но граница одной из конфигураций пересекает границу или внутренность другой.
Within(g1,g2)
Возвращается 1 или 0, чтобы указать, является ли g1 пространственно внутри g2.
4.6. Оптимизация пространственного анализа
Операции поиска в непространственных базах данных могут быть оптимизированы, используя индексы. Это также истинно для пространственных баз данных. С помощью большого разнообразия многомерных методов индексации, которые предварительно были разработаны, возможно оптимизировать пространственные поиски. Наиболее типично для них:
Запросы точки, которые ищут все объекты, которые содержат данную точку.
Запросы области, которые ищут все объекты, которые накладываются на данную область.
MySQL использует R-деревья с квадратным разбиением, чтобы индексировать пространственные столбцы. Пространственный индекс сформирован, используя MBR геометрии. Для большинства конфигураций MBR минимальный прямоугольник, который окружает конфигурацию. Для горизонтальных или вертикальных linestring MBR прямоугольник, вырождающийся в linestring. Для point MBR является точкой.
Также возможно создать нормальные индексы на пространственных столбцах. Вам надо объявить префикс для любого непространственного индекса на пространственном столбце, кроме столбцов POINT.
4.6.1. Создание пространственных индексов
MySQL может создавать пространственные индексы, использующие синтаксис, подобный аналогичному для создания регулярных индексов, но расширенный с ключевым словом SPATIAL. В настоящее время пространственные столбцы, которые индексированы, должны быть объявлены как NOT NULL. Следующие примеры показывают, как создавать пространственные индексы:
С CREATE TABLE:CREATE TABLE geom (g GEOMETRY NOT NULL, SPATIAL INDEX(g));
С ALTER TABLE:ALTER TABLE geom ADD SPATIAL INDEX(g);
С CREATE INDEX:CREATE SPATIAL INDEX sp_index ON geom (g);
Для таблиц MyISAM SPATIAL INDEX создает индекс R-tree. Для других типов памяти, которые поддерживают пространственную индексацию, SPATIAL INDEX создает индекс B-tree. B-tree на пространственных значениях будет полезен для поисковых таблиц с точным значением, но не для диапазона.
Для удаления пространственного индекса, используйте ALTER TABLE или DROP INDEX:
С ALTER TABLE:ALTER TABLE geom DROP INDEX g;
С DROP INDEX:DROP INDEX sp_index ON geom;
Пример: Предположите, что таблица geom содержит больше, чем 32000 конфигурации, которые сохранены в столбце g типа GEOMETRY. Таблица также имеет столбец AUTO_INCREMENT fid для сохранения значений объекта ID.mysql> DESCRIBE geom;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| fid | int(11) | | PRI | NULL | auto_increment |
| g | geometry | | | | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT COUNT(*) FROM geom;
+----------+
| count(*) |
+----------+
| 32376 |
+----------+
1 row in set (0.00 sec)
Чтобы добавлять пространственный индекс на столбце g, используйте эту инструкцию:mysql> ALTER TABLE geom ADD SPATIAL INDEX(g);
Query OK, 32376 rows affected (4.05 sec)
Records: 32376 Duplicates: 0 Warnings: 0
4.6.2. Использование пространственного индекса
Оптимизатор исследует, могут ли доступные пространственные индексы включаться в поиск для запросов, которые используют функцию типа MBRContains() или MBRWithin() в предложении WHERE. Следующий запрос находит все объекты, которые находятся в данном прямоугольнике:mysql> SET @poly = 'Polygon((30000 15000, 31000 15000, 31000 16000,
– > 30000 16000, 30000 15000))';
mysql> SELECT fid, AsText(g) FROM geom WHERE
– > MBRContains(GeomFromText(@poly), g);
+-----+---------------------------------------------------------------+
| fid | AsText(g) |
+-----+---------------------------------------------------------------+
| 21 | LINESTRING(30350.4 15828.8,30350.6 15845,30333.8 15845,30 … |
| 22 | LINESTRING(30350.6 15871.4,30350.6 15887.8,30334 15887.8, … |
| 23 | LINESTRING(30350.6 15914.2,30350.6 15930.4,30334 15930.4, … |
| 24 | LINESTRING(30290.2 15823,30290.2 15839.4,30273.4 15839.4, … |
| 25 | LINESTRING(30291.4 15866.2,30291.6 15882.4,30274.8 15882. … |
| 26 | LINESTRING(30291.6 15918.2,30291.6 15934.4,30275 15934.4, … |
| 249 | LINESTRING(30337.8 15938.6,30337.8 15946.8,30320.4 15946. … |
| 1 | LINESTRING(30250.4 15129.2,30248.8 15138.4,30238.2 15136. … |
| 2 | LINESTRING(30220.2 15122.8,3024.2 15137.8,30207.6 15136, … |
| 3 | LINESTRING(30179 15114.4,30176.6 15129.4,30167 15128,3016 … |
| 4 | LINESTRING(30155.2 15121.4,30140.4 15118.6,30142 15109,30 … |
| 5 | LINESTRING(30192.4 15085,30177.6 15082.2,30179.2 15072.4, … |
| 6 | LINESTRING(30244 15087,30229 15086.2,30229.4 15076.4,3024 … |
| 7 | LINESTRING(30200.6 15059.4,30185.6 15058.6,30186 15048.8, … |
| 10 | LINESTRING(30179.6 1504.8,30181 15002.8,30190.8 15003.6, … |
| 11 | LINESTRING(30154.2 15000.4,30168.6 15004.8,30166 15014.2, … |
| 13 | LINESTRING(30105 15065.8,30108.4 15050.8,30118 15053,3011 … |
| 154 | LINESTRING(30276.2 15143.8,30261.4 15141,30263 15131.4,30 … |
| 155 | LINESTRING(30269.8 15084,30269.4 15093.4,30258.6 15093,30 … |
| 157 | LINESTRING(30128.2 15011,30113.2 15010.2,30113.6 15000.4, … |
+-----+---------------------------------------------------------------+
20 rows in set (0.00 sec)
Использование EXPLAIN показывает, каким способом этот запрос выполнен:mysql> SET @poly = 'Polygon((30000 15000, 31000 15000,
– > 31000 16000, 30000 16000, 30000 15000))';
mysql> EXPLAIN SELECT fid, AsText(g) FROM geom WHERE
– > MBRContains(GeomFromText(@poly), g)G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: geom
type: range
possible_keys: g
key: g
key_len: 32
ref: NULL
rows: 50
Extra: Using where
1 row in set (0.00 sec)
Проверьте, что случилось бы без пространственного индекса:mysql> SET @poly = 'Polygon((30000 15000, 31000 15000,
– > 31000 16000, 30000 16000, 30000 15000))';
mysql> EXPLAIN SELECT fid,AsText(g) FROM g IGNORE INDEX (g) WHERE
– > MBRContains(GeomFromText(@poly), g)G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: geom
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 32376
Extra: Using where
1 row in set (0.00 sec)
Выполнение инструкции SELECT без пространственного индекса выдает тот же самый результат, но заставляет время выполнения повышаться с 0.00 до 0.46 секунды:mysql> SET @poly = 'Polygon((30000 15000, 31000 15000,
– > 31000 16000, 30000 16000, 30000 15000))';
mysql> SELECT fid, AsText(g) FROM geom IGNORE INDEX (g) WHERE
– > MBRContains(GeomFromText(@poly), g);
+-----+---------------------------------------------------------------+
| fid | AsText(g) |
+-----+---------------------------------------------------------------+
| 1 | LINESTRING(30250.4 15129.2,30248.8 15138.4,30238.2 15136. … |
| 2 | LINESTRING(30220.2 15122.8,3024.2 15137.8,30207.6 15136, … |
| 3 | LINESTRING(30179 15114.4,30176.6 15129.4,30167 15128,3016 … |
| 4 | LINESTRING(30155.2 15121.4,30140.4 15118.6,30142 15109,30 … |
| 5 | LINESTRING(30192.4 15085,30177.6 15082.2,30179.2 15072.4, … |
| 6 | LINESTRING(30244 15087,30229 15086.2,30229.4 15076.4,3024 … |
| 7 | LINESTRING(30200.6 15059.4,30185.6 15058.6,30186 15048.8, … |
| 10 | LINESTRING(30179.6 1504.8,30181 15002.8,30190.8 15003.6, … |
| 11 | LINESTRING(30154.2 15000.4,30168.6 15004.8,30166 15014.2, … |
| 13 | LINESTRING(30105 15065.8,30108.4 15050.8,30118 15053,3011 … |
| 21 | LINESTRING(30350.4 15828.8,30350.6 15845,30333.8 15845,30 … |
| 22 | LINESTRING(30350.6 15871.4,30350.6 15887.8,30334 15887.8, … |
| 23 | LINESTRING(30350.6 15914.2,30350.6 15930.4,30334 15930.4, … |
| 24 | LINESTRING(30290.2 15823,30290.2 15839.4,30273.4 15839.4, … |
| 25 | LINESTRING(30291.4 15866.2,30291.6 15882.4,30274.8 15882. … |
| 26 | LINESTRING(30291.6 15918.2,30291.6 15934.4,30275 15934.4, … |
| 154 | LINESTRING(30276.2 15143.8,30261.4 15141,30263 15131.4,30 … |
| 155 | LINESTRING(30269.8 15084,30269.4 15093.4,30258.6 15093,30 … |
| 157 | LINESTRING(30128.2 15011,30113.2 15010.2,30113.6 15000.4, … |
| 249 | LINESTRING(30337.8 15938.6,30337.8 15946.8,30320.4 15946. … |
+-----+---------------------------------------------------------------+
20 rows in set (0.46 sec)
В будущих выпусках пространственные индексы могут также использоваться для оптимизации других функций.

