Может ли пространственный индекс быть частью индекса из нескольких столбцов?

8

Это руководство здесь крайне непонятно и даже не содержит некоторых примеров операторов SQL: http://dev.mysql.com/doc/refman/5.6/en/column-indexes.html

Другой способ перефразировать вопрос заключается в следующем:

Мы знаем, что можем иметь индекс с несколькими столбцами. Что делать, если индексы этих столбцов имеют другой тип? Скажем, первый столбец является пространственным, другой - полным текстовым поиском и т. Д. Можем ли мы сделать это в mysql? (Бонус: можем ли мы сделать это в mongodb, если вы знаете)

Скажем, у вас есть таблица myisam

Имеет столбец LATLONG, который содержит точки

Он имеет столбец FULLTEXT, который содержит слова в «бизнесе»

Сначала вы хотите выполнить запрос по LATLONG, а затем в соответствующем LATLONG, который хотите отфильтровать на основе столбца FULLTEXT.

Я полагаю, вам понадобится несколько столбцов индекса.

Но что такое команда SQL?

Как мы знаем, mysql всегда будет сначала использовать индекс fulltextsearch, если это возможно.

Этот запрос:

SELECT BusinessID as ID ,  
  111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS Distance from tableauxiliary 
use index (LatLong_2)
WHERE
    MBRContains(
    GeomFromText (
        'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)'
        ),
        Latlong)=1  
    AND Prominent >15 
    AND MATCH FullTextSearch AGAINST ('sea*' IN BOOLEAN MODE)
    ORDER BY
  Distance
LIMIT
  0, 45

Занимает много времени, пока этот запрос:

SELECT BusinessID as ID ,  
  111151.29341326*SQRT(pow(-6.186751-X(LatLong),2)+pow(106.772835-Y(LatLong),2)*0.98838574205337) AS Distance from tableauxiliary 
use index (LatLong_2)
WHERE
    MBRContains(
    GeomFromText (
        'MULTIPOINT(-6.1934985598076 106.76604791159,-6.1800034401924 106.77962208841)'
        ),
        Latlong)=1  
    AND Prominent >15 
    AND MATCH FullTextSearch AGAINST ('sea*' IN BOOLEAN MODE)
    ORDER BY
  Distance
LIMIT
  0, 45

быстрее, потому что я говорю mysql использовать вместо этого индекс latlong_2, который является пространственным запросом.

Ну, скажем, я хочу иметь индекс из нескольких столбцов. Latlong_2 и FULLTEXTSEARCH. Они от другого типа. LatLong_2 является пространственным, а FULLTEXTSEARCH является полнотекстовым поисковым индексом. Какую команду SQL я должен выполнить?

user4951
источник

Ответы:

3

Нет, ты не можешь.

Индекс в MySQL будет либо

  • BTREEиндекс одного или нескольких столбцов.

  • HASHиндекс (только для MEMORYтаблиц), которые могут охватывать несколько столбцов.

  • SPATIALиндекс (только для MyISAMтаблиц).

  • FULLTEXTиндекс (доступен MyISAMи 5.6.4+ InnoDBтаблиц), которые могут охватывать несколько столбцов CHAR, VARCHARили TEXTтипа.

Вы не можете объединить эти типы.

ypercubeᵀᴹ
источник