使用LIKE语句进行查询优化

时间:2013-12-16 14:19:30

标签: mysql sql performance query-optimization

创建一个这样的表:

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的查询(如解释所示)。

1 个答案:

答案 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