@Override public String buildUniqueIndexIdentifier(IndexDescriptor idx) { if (idx == null) { return null; } else { return idx.getTableName() + "_" + idx.getIndexName(); } }
&& (selectedIdx == null || idx.getIndexName().compareTo(selectedIdx.getIndexName()) < 0))) { maxAvgRowSize = idxRowSize; selectedIdx = idx;
public boolean isValidIndexHint(IndexLogicalPlanCallContext indexContext) { if (indexContext.indexHint.equals("")) { return false; } for (IndexDescriptor index: indexes ) { if (indexContext.indexHint.equals(index.getIndexName())) { return true; } } return false; }
@Override public String buildUniqueIndexIdentifier(IndexDescriptor idx) { if (idx == null) { return null; } else { return idx.getTableName() + "_" + idx.getIndexName(); } }
&& (selectedIdx == null || idx.getIndexName().compareTo(selectedIdx.getIndexName()) < 0))) { maxAvgRowSize = idxRowSize; selectedIdx = idx;
indexDescriptor.getIndexName(), leadingPrefixMap, satisfiesCollation, indexColumnsRemainderFilter);
if (p.getLeadingSelectivity() > selThreshold) { logger.debug("Skipping index {}. The leading selectivity {} is larger than threshold {}", p.getIndexDesc().getIndexName(), p.getLeadingSelectivity(), selThreshold); logger.debug("index_plan_info: Skipping covering index {} because a higher ranked covering index with collation already exists.", indexProps.getIndexDesc().getIndexName()); continue; indexProps.getIndexDesc().getIndexName(), indexProps.satisfiesCollation(), indexProps.getLeadingSelectivity(), (foundCovering && !indexProps.satisfiesCollation())) { logger.debug("index_plan_info: Skipping non-covering index {} because it does not have collation and a higher ranked covering index already exists.", indexProps.getIndexDesc().getIndexName()); continue; indexProps.getIndexDesc().getIndexName(), indexProps.satisfiesCollation(), indexProps.getLeadingSelectivity(), isectLeadingSel *= indexProps.getLeadingSelectivity(); logger.info("name: {}, {}, collation: {}, leadingSelectivity: {}, cost: {}", indexProps.getIndexDesc().getIndexName(), isectName, indexProps.satisfiesCollation(),
if (isValidIndexHint && !indexContext.indexHint.equals(indexDesc.getIndexName())) { logger.info("index_plan_info: Index {} is being discarded due to index Hint", indexDesc.getIndexName()); continue; strb.append("Covering indexes:"); for (IndexGroup index : coveringIndexes) { strb.append(index.getIndexProps().get(0).getIndexDesc().getIndexName()).append(", "); strb.append("Non-covering indexes:"); for (IndexGroup index : nonCoveringIndexes) { strb.append(index.getIndexProps().get(0).getIndexDesc().getIndexName()).append(", "); List<String> indices = new ArrayList<>(nonCoveringIndexes.size()); for (IndexGroup index : nonCoveringIndexes) { indices.add(index.getIndexProps().get(0).getIndexDesc().getIndexName()); logger.info("index_plan_info: Generating covering index plan for index: {}, query condition {}", indexDesc.getIndexName(), indexCondition.toString()); logger.info("index_plan_info: Generating non-covering index plan for index: {}, query condition {}", indexDesc.getIndexName(), indexCondition.toString()); NonCoveringIndexPlanGenerator planGen = new NonCoveringIndexPlanGenerator(indexContext, indexDesc, idxScan, indexCondition, remainderCondition, builder, settings);