点标签: dhhm
点属性: vId,city,operator,vId是点的ID值
索引: index1 on dhhm(vId) 、 index2 on dhhm(city) ,不对 operator 建立索引
查询语句1:lookup on dhhm where dhhm.vId == “DHHM_13500000001” and dhhm.city == “重庆” | limit 10;
查询语句2:lookup on dhhm where dhhm.city == “重庆” and dhhm.vId == “DHHM_13500000001” | limit 10;
查询语句3:lookup on dhhm where dhhm.vId == “DHHM_13500000001” and dhhm.operator == “联通” | limit 10;
查询语句1和查询语句2耗时5秒,执行语句3耗时0.01秒,指定两个都建立了索引的字段反而更慢
分析发现执行语句1和执行语句2都是基于 city做索引扫描,会匹配上大量数据,然后再根据vId过滤,而vId是唯一的,只会匹配出一条,由此导致查询语句1和查询语句2慢
此外,在不建立复合索引的情况下,建立索引时指定的字段长度,比如index1 on dhhm(vId(20)) 、 index2 on dhhm(city(10)),对于查询结果并没有影响,应是优化没有考虑这个因素
在对索引建立的先后顺序进行调整后,即之前是先建立了index2 on dhhm(city(10)),再建立index1 on dhhm(vId(20)) ,现在先建立index1 on dhhm(vId(20)) ,再建立index2 on dhhm(city(10)),查询时,查询语句1和查询语句2都使用了vId做索引,结果响应很快,所以在选择索引时,索引创建的时间是重要参考因素,创建时间早的优先选择