我正在寻找一种方法来指定MySQL索引使用的顺序(使用MariaDB 10的InnoDB中的BTREE)。更具体地说,我想创建一个索引,该索引使用类似于以下伪代码的可变长度条目索引varchar
列:
-- assume "str" to be the field in question, return values like strcmp
if (len(row1.str) < len(row2.str))
{
return -1;
} else if (len(row1.str) > len(row2.str)) {
return 1;
} else {
return row1.str < row2.str;
}
有没有办法只为一个特定的索引指定这个排序?
答案 0 :(得分:1)
这样的事情会产生同样的效果:
ORDER BY CHAR_LENGTH(str), str
答案 1 :(得分:1)
https://mariadb.com/kb/en/mariadb/virtual-computed-columns/ -
ALTER TABLE foo ADD COLUMN
for_sorting VARCHAR(...) -- make a little wider than `str`
AS ( -- syntax
CONCAT(
RIGHT(CONCAT('0000', CHAR_LENGTH(str)), 5), -- num sortable as string
':', str ) -- tack on `str` for when len differs
) PERSISTENT -- "indexes can only be based on PERSISTENT virtual columns"
COMMENT "kludge for special indexing"
然后执行ORDER BY for_sorting
。
(警告:我没有尝试过,但感觉它会起作用。)