【问题详细描述】
将数据导入SequoiaDB中进行查询,查询速度很慢,之前的数据库是informix,速度快很多,索引这种两个地方建的是一样的,查询语句也一样,在informix查询5秒以内,在SequoiaDB查询13~20秒,总共1千多万条数据,为什么SequoiaDB性能会慢这么多?
【解决办法】
1. 在 MySQL 查看查询访问计划,查询结果见附件"2-explainc查询计划.jpg",type 字段显示为 ALL,表示是表扫描;
2. 查看索引结构,见附件“1-表结构和索引结构.jpg”,结合附件"2-explainc查询计划.jpg",查询条件中 b14xglsh 字段为 idx_nbmx23 索引的中间字段,所以没有命中索引。原因:SequoiaDB扫描走索引时索引键是有序的,即查询条件必须包含当前索引键字段的前面所有索引键字段,否则走表扫描。比如索引{a:1,b:1,c:1},查询条件:{a:1} 、{a:1,b:1}、{a:1,b:1,c:1}都可以命中索引;但是 {b:1} 不能命中索引,查询走表扫描;
3. 建议如果当前查询字段为频率较高查询字段,建议修改索引结构,将改索引字段放在第一个,或根据业务需求创建该字段的单键索引也是可以的。
4. 该问题修改 idx_nbmx23 索引第一个字段为 b14xglsh ,再次查询,性能有很明显的提升,问题解决。