假设我有这个表:的MySQL索引+查询处理
create table table_a (
id int,
name varchar(25),
address varchar(25),
primary key (id)
) engine = innodb;
当我运行此查询:
select * from table_a where id >= 'x' and name = 'test';
如何将MySQL的过程呢?它会拉所有的id的第一(假设1000行),然后应用where子句名称='测试'?
或者当它查找id时,它已经在同时应用where子句?
我不知道具有单独的索引id和名称将使具有相同的性能影响有一个组合索引。你确定吗? – 2012-04-08 21:55:54
@AtaS。 - 这取决于优化器。它可能会选择进行索引合并,在这种情况下,它将具有与使用组合索引类似的性能优势,但它可能不会。 - [索引合并优化](http://dev.mysql.com/doc/refman/5.0/en/index-merge-optimization.html) – nnichols 2012-04-08 22:05:43
假设表有多个文本列,并且我仍然运行相同的查询,那么就像你说的那样,它会先抓住所有的行,然后应用filter子句。在这种情况下,文本列在内存中放置非常昂贵。它是否正确? – Carmen 2012-04-09 00:37:42