Я создал вторичный индекс в couchbase:
CREATE INDEX `data` ON `bucket`(`field1`,`field2`,`field3`,
lower(`field4`)) WHERE (`field5` = "CONSTANT")
Когда я выполняю этот запрос на couchbase:
select document.* from bucket AS document WHERE document.field5 = "CONSTANT"
AND document.field1 = "docId"
and (document.field3 like "%" or
lower(document.field4) like "%");
Даже без указания значения для один из ведущих предикатов (field2), запрос все еще работает правильно. Может кто-нибудь объяснить, почему?
Это план запроса, который возвращается при добавлении «EXPLAIN» перед запросом:
"#operator": "Sequence",
"~children": [
{
"#operator": "Sequence",
"~children": [
{
"#operator": "IndexScan3",
"as": "document",
"index": "data",
"index_id": "6588bcds21b213",
"index_projection": {
"primary_key": true
},
"keyspace": "bucket",
"namespace": "default",
"spans": [
{
"exact": true,
"range": [
{
"high": "\"docId\"",
"inclusion": 3,
"low": "\"docId\""
}
]
}
],
"using": "gsi"
},
{
"#operator": "Fetch",
"as": "document",
"keyspace": "bucket",
"namespace": "default"
},
{
"#operator": "Parallel",
"~child": {
"#operator": "Sequence",
"~children": [
{
"#operator": "Filter",
"condition": "((((`document`.`field5`) = \"CONSTANT\") and ((`document`.`field1`) = \"docId\")) and (((`document`.`field3`) like \"%\"]) or (lower((`document`.`field4`)) like \"%\")))"
},
{
"#operator": "Project",
"result_terms": [
{
"expr": "`document`",
"star": true
}
]
}
]
}
}
]
}