我有100万份文件。
我想运行此查询:
SELECT * FROM bucket WHERE type = 'toy' AND material = 'plastic' AND color = 'red' AND weight = '200gr' AND height = '5cm' AND width = '15cm'
"属性"是嵌入在文档中的对象。
示例:
"输入":"玩具",
"其他关键":"其他值",&& #34;其他关键":"其他 价值",
"属性":{
"材料":"塑料",
"颜色":"红色",
"重量":" 200gr",&"身高&# 34;:" 5cm",
"宽度":" 15cm"
}"其他键":"其他值",
"其他关键": "其他价值"
如何在Query Workbench中创建索引以获得最快的响应时间?
答案 0 :(得分:1)
假设您有以下文档:
{
"type": "toy",
"attributes": {
"material": "plastic",
"color": "red",
"weight": "200gr",
"height": "5cm",
"width": "15cm"
}
}
您的查询就像:
SELECT * FROM `test` t WHERE t.type = 'toy' AND t.attributes.material = 'plastic' AND t.attributes.color = 'red'AND t.attributes.weight = '200gr' AND t.attributes.height = '5cm' AND t.attributes.width = '15cm'
它的索引与此类似:
create index toysIndex on `test`(type, attributes.material, attributes.color, attributes.weight, attributes.height, attributes.width ) USING GSI;
答案 1 :(得分:0)
deniswsrosa的建议肯定会起作用,但是您可以通过将类型规范移到索引的WHERE子句中对其进行一些改进。这样,这些字段的索引将仅包含“玩具”类型的对象;其他类型的对象将不会被索引。这将使索引稍微小一些,因为它更具体。在使用索引时仍会考虑type =“ toy”子句。
赞:
create index toysIndex on test(attributes.material, attributes.color,
attributes.weight, attributes.height, attributes.width )
where type = 'toy';
请注意,您不需要在“测试”后面打勾。另外,GSI索引是默认索引。