2010-02-13 16 views
31

Comme la plupart des développeurs web PHP en moyenne, j'utilise MySql comme un SGBDR. MySql (comme d'autres SGBDR) offre des fonctionnalités SPATIAL INDEX, mais je ne comprends pas très bien. Je l'ai googlé pour cela, mais je n'ai pas trouvé d'exemples clairs du monde réel pour clarifier mes mauvaises connaissances à ce sujet.Qu'est-ce qu'un INDICE SPATIAL et quand devrais-je l'utiliser?

Quelqu'un pourrait-il m'expliquer un peu ce qu'est un INDEX SPATIAL et quand devrais-je l'utiliser?

+5

Demian, cette réponse à votre question? n'hésitez pas à ajouter un commentaire à ma réponse si vous avez besoin de plus d'aide. Ou si cela a résolu pour vous, s'il vous plaît soyez si gentil de vérifier ma réponse comme "la réponse". TIA, roland. –

+1

La documentation officielle de MySQL donne des explications et des exemples: [Création d'index spatiaux] (http://dev.mysql.com/doc/refman/5.5/fr/creating-spatial-indexes.html) - [Utilisation d'un index spatial] (http://dev.mysql.com/doc/refman/5.5/en/using-a-spatial-index.html) – Jocelyn

Répondre

17

Vous pouvez utiliser un index spatial pour indexer des géo-objets - formes. L'index spatial permet de rechercher efficacement des objets qui se chevauchent dans l'espace

+4

Bien que très spécifique [Création de bases de données spatiales hautes performances] (http://sqlbits.com/Sessions/ Event5/creating_high_performance_spatial_databases) est une excellente vidéo pour comprendre comment les index spatiaux sont TRÈS différents des autres index. –

+0

Juste curieux, étant donné que les indices spatiaux sont en 2D, est-ce que je peux les exploiter dans d'autres cas d'utilisation, comme les requêtes d'intervalles sur des données internes régulières? –

+0

@MangatRaiModi Si ce n'est que des données entières régulières, alors vous pouvez utiliser un index btree normal. Ces supports varient les requêtes. –

6

L'indice spatial est comme un index ordinaire avec cette différence que les objets spatiaux ne sont pas des points de données 1D mais plutôt dans un espace de dimension plus élevée (par exemple 2D) et donc ordinaires. les index tels que BTree ne sont pas appropriés pour indexer ces données. La technique spatiale Index bien connue est R-tree (Google sur wikipedia)

-2

L'utilisation de l'index spatial est la meilleure pour rechercher une recherche de valeur exacte, pas pour un balayage de gamme. Elle est principalement supportée dans les tables MyISAM mais à partir de la version 5.7.4 de MySQL, il est également supporté par Innodb.

Références: - http://dev.mysql.com/doc/refman/5.5/en/creating-spatial-indexes.html http://mysqlserverteam.com/innodb-spatial-indexes-in-5-7-4-lab-release/

+1

D'abord ça s'appelle un index spatial. Deuxièmement, votre commentaire sur le fait que ce n'est pas pour l'analyse de portée s'applique à un index non spatial sur un arbre, donc il ne s'agit pas d'un index spatial - "Pour les moteurs de stockage qui supportent l'indexation non spatiale des colonnes spatiales Un index B-tree sur les valeurs spatiales est utile pour les recherches de valeurs exactes, mais pas pour les analyses de plages. " – jbu