Запрос с использованием `FIND` и ʻINDEX` завершился неудачно. Как работает индексация Nebula Graph?
Я считаю, что индексация важна для поиска нужных данных в базе данных. Может кто-нибудь рассказать, как работает индексация в Nebula Graph?
1 ответ
Я заметил, как работает индекс в туманности. Предположим, у вас есть тег:тег (col1, col2). Вы можете создавать разные индексы для тега:
- index1 по тегу (col1)
- index2 по тегу (col2)
- index3 по тегу (col1, col2)
- index4 по тегу (col2, col1)
Когда туманность сканирует индексы, есть большая разница в 4 вышеуказанных индексов. Nebula выберет тот, который лучше всего подходит для вашей ситуации. Например:
- посмотрите на тег, где tag.col1 == 1 - >> лучший индекс - index1
- поиск по тегу, где tag.col2 == 2 - >> лучший индекс index2
- поиск по тегу, где tag.col1> 1 и tag.col2 == 1 - >> index3 и index4 здесь равны. Но nebula выберет index4 как лучший, потому что tag.col2 == 1 - это равный запрос, использование tag.col2 вначале более эффективно.
Примеры:
CREATE SPACE my_space(partition_num=3, replica_factor=1);
USE my_space;
CREATE TAG lookup_tag_1(col1 string, col2 string, col3 string);
CREATE TAG INDEX t_index_1 ON lookup_tag_1(col1, col2, col3);
УДАЛИТЬ
drop TAG INDEX t_index_1;
ПОГЛЯДИ
INSERT VERTEX lookup_tag_1(col1, col2, col3) VALUES 200:("col1_200", "col2_200", "col3_200"), 201:("col1_201", "col2_201", "col3_201"), 202:("col1_202", "col2_202", "col3_202");
LOOKUP ON lookup_tag_1 WHERE lookup_tag_1.col1 == "col1_200";
============
| VertexID |
============
| 200 |
------------
LOOKUP ON lookup_tag_1 WHERE lookup_tag_1.col1 == "col1_200" YIELD lookup_tag_1.col1, lookup_tag_1.col2, lookup_tag_1.col3;
========================================================================
| VertexID | lookup_tag_1.col1 | lookup_tag_1.col2 | lookup_tag_1.col3 |
========================================================================
| 200 | col1_200 | col2_200 | col3_200 |
------------------------------------------------------------------------