创建一个这样的表:
CREATE TABLE test ( a INT(10), b char(10));
添加两个索引:
alter table test add key aa (a), add key bb (b);
插入一些行:
insert into test values (132,'logi');
insert into test values (322,'koko');
insert into test values (32,'kola');
等...
您可以使用少量行测试但是在我的应用程序中我会有一亿行,所以我要问的是有道理的: 所以,假设我想执行两个查询:
1) explain select * from test where b like "frif%";
2) explain select * from test where a like "32%";
第一个使用索引bb,因为b是char,而第二个不使用索引aa,因为a只是一个INT(我把它当作char!)。 如何使第二个查询作为第一个执行并搜索“some_number%”之类的数字,并使其成为范围类型而不是ALL的查询(如解释所示)。
答案 0 :(得分:1)
如果您将数字视为字符串,则以该方式存储。听起来这个数字是某种代码。虽然由数字组成,但它实际上只是某些东西的名称(例如帐号)。
如果数字是固定长度,比如说5,那么你可以这样做:
where a >= 32000 and a < 33000;
你可以将这个想法扩展到不同的长度:
where a >= 32 and a < 33 or
a >= 320 and a < 330 or
a >= 3200 and a < 3300 or
a >= 30000 and a < 33000