【发布时间】:2011-11-18 01:38:13
【问题描述】:
我有一个缓慢(1.4 秒)的查询,已经困扰了我一段时间,所以我只是想把它放上来看看是否有人可以帮助我优化我的索引以加快它:
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应该有索引吗? mysqlperformanceblog.com/2006/09/01/… -
完全没有回答您的问题,但是您可以选择在 PostgreSQL 下尝试相同的查询吗?我通常可以得到 10 表连接,每个连接有 10 几百万行,每行只需要几百毫秒。在需要时自行组合索引非常棒。
-
不幸的是我没有 postgresql
标签: mysql optimization indexing