假設我有這個表:的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