code: func (h mvccTxnHandler) handleMvccGetByIdx(params map[string]string, values url.Values) (interface{}, error) {
  	dbName := params[pDBName]
  	tableName := params[pTableName]
  	handleStr := params[pHandle]
  	schema, err := h.schema()
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  	// get table's schema.
  	t, err := schema.TableByName(model.NewCIStr(dbName), model.NewCIStr(tableName))
  	if err != nil {
  		return nil, errors.Trace(err)
  	}
  	var idxCols []*model.ColumnInfo
  	var idx table.Index
  	for _, v := range t.Indices() {
  		if strings.EqualFold(v.Meta().Name.String(), params[pIndexName]) {
  			for _, c := range v.Meta().Columns {
  				idxCols = append(idxCols, t.Meta().Columns[c.Offset])
  			}
  			idx = v
  			break
  		}
  	}
  	if idx == nil {
  		return nil, errors.NotFoundf("Index %s not found!", params[pIndexName])
  	}
  	return h.getMvccByIdxValue(idx, values, idxCols, handleStr)
  }
docs: // handleMvccGetByIdx gets MVCC info by an index key.