我正在为我的高流量网站优化一个mysql表,我有一个关于mysql索引的问题。首先一些信息:MySQL索引最佳性能
该表有273382行。
查询是:
SELECT table1.field1, table1.field2, table2.field2
FROM table1
LEFT JOIN table2 ON table1.idfield = table2.idfield
WHERE table1.field = 1 AND table1.field2 = 'yes'
ORDER BY table1.id DESC
LIMIT 0,25
我有以下指标:
index for table1.id - primary unique index
index for table1.idfield - index
index for table2.idfield - index
index for (table1.field,table1.field2) - index
通过上述指标的查询需要1.5至2.5秒即可完成
EXPLAIN EXTENDED说,正在使用主键(table1.id),我试过unique/index(table1.field,table1.field2,table1.id),结果类似(即使它使用了这个索引)。
在索引更改过程中(大约需要1分钟),查询变得快得多0.009。一旦更改过程完成,查询就会回到1.5-2.5s(大部分低于2)的速度。
我的问题是:哪个索引对这个查询最有效,以及为什么查询在更改索引时速度更快。
一般经验法则:在决策环境中使用的任何字段('where,'join,等等)都应该有一个索引。并注意只是有一个索引并不意味着它会随时使用。 mysql可能会决定全表扫描比使用索引更有效。 –
我意识到了这一点,并且我在连接和字段的位置都有索引,但查询仍然很慢。但是在更改过程中,查询运行速度要快得多,为什么?我怎样才能使这个查询运行速度与它被修改时一样快。 –
尝试将table1.field和table1.field2列添加到索引中。它可能有助于您的表现。 – reza