code: func DecodeIndexKey(key kv.Key) (tableID int64, indexID int64, indexValues []string, err error) {
  	k := key
  
  	tableID, indexID, isRecord, err := DecodeKeyHead(key)
  	if err != nil {
  		return 0, 0, nil, errors.Trace(err)
  	}
  	if isRecord {
  		return 0, 0, nil, errInvalidIndexKey.GenWithStack("invalid index key - %q", k)
  	}
  	key = key[prefixLen+idLen:]
  
  	for len(key) > 0 {
  		// FIXME: Without the schema information, we can only decode the raw kind of
  		// the column. For instance, MysqlTime is internally saved as uint64.
  		remain, d, e := codec.DecodeOne(key)
  		if e != nil {
  			return 0, 0, nil, errInvalidIndexKey.GenWithStack("invalid index key - %q %v", k, e)
  		}
  		str, e1 := d.ToString()
  		if e1 != nil {
  			return 0, 0, nil, errInvalidIndexKey.GenWithStack("invalid index key - %q %v", k, e1)
  		}
  		indexValues = append(indexValues, str)
  		key = remain
  	}
  	return
  }
docs: // DecodeIndexKey decodes the key and gets the tableID, indexID, indexValues.