Mysql char搜索与整数

时间:2011-09-29 09:14:17

标签: mysql

我有这个问题:

SELECT * FROM table WHERE field = 'abcd';

表有很多行(1'000'000'000或更多)

如果不使用field ='abcd',我会使用类似

的内容
SELECT * FROM table WHERE field = 'abcd' AND other_field = 300;

,其中300是一个依赖于'abcd'(f(abcd)=> 300)的数字,查询运行得更快吗?

1 个答案:

答案 0 :(得分:2)

使用唯一索引时的搜索时间
MySQL使用BTree索引 这意味着在log(n)时间内找到唯一的行。 如果您搜索65536行,则假设完全平衡的树,最多需要16次比较才能找到该行 如果您搜索1,000,000,000,则需要30次比较才能找到该行,假设完全平衡的树和唯一值。

如果您搜索唯一键,添加额外测试几乎没有意义。

使用非唯一索引搜索时间
如果您在非唯一树上搜索,搜索时间会很快,但结果集当然会包含多于1行,并且查询时间会随着行数的增加而上升。 如果MySQL认为使用索引很有用,那么初始密钥将在极少数测试中找到。

然而,实际的时间花在了匹配的行上。