我有一个缓慢(1.4秒)的查询,一直在困扰着我一段时间,所以我只是觉得我会把它,看看是否有人可以帮助我优化我的索引,加快它:优化mysql索引
select sql_calc_found_rows t.id, q.im_id, concat(t.si_id, ' ', t.de), q.date, q.das, q.dac, u.name, q.ac, q.st
from t300q q
left join t300 t on t.id = q.con_id
left join users u on u.id = q.user_id
order by q.date desc limit 0,100
sql中解释结果:
SIMPLE q ALL 89126 Using filesort
SIMPLE t eq_ref PRIMARY PRIMARY 4 db.q.con_id 1
SIMPLE u eq_ref PRIMARY PRIMARY 4 db.q.user_id 1
会话统计:
Handler_read_first = 0
Handler_read_key = 177934
Handler_read_next = 23
Handler_read_prev = 679
Handler_read_rnd = 15
Handler_read_rnd_next = 89127
,我有以下指标:
t.id - primary key
q.con_id |
q.date | - all form a single index
q.user_id |
u.id - primary key
,你可以看到从处理程序统计表q
的大小为89126行。
这不是一个大问题,但如果可能的话,我希望速度低于1秒。
'q.date '应该有索引? http://www.mysqlperformanceblog.com/2006/09/01/order-by-limit-performance-optimization/ – osgx
完全不回答你的问题,但是你有选择在PostgreSQL下尝试相同的查询吗?我通常可以将10个表的连接数以百万计的行数减少到几百毫秒。在需要时自行组合索引是非常好的。 –
不幸的是我没有postgresql – mulllhausen