我有一个特定的结构,我想要重写,以便它运行更快的MySQL查询。目前运行速度很慢,需要大约255秒才能执行。如果我删除了连接,它将在10秒内运行<。它的目的是一次从表A获得100行记录,只要用户希望看到更多的行。制作限制X,Y MySQL查询连接运行更快
我怀疑这个查询花了很长时间,因为它在连接上发现的不止是前100行。这是真的吗?如果是这样,有没有办法在从主表中获取行之后重写查询来完成连接?
数据来自'主'表A,它具有日期时间字段(START_TIME)和多个带字符串值的表的外键(表,B,C,D)。
表A有250万行。表B有600K行。 表A在START_TIME上有一个索引。表B有一个ID值的索引。
这是查询的基本形式。我不想在START_TIME上设置上限,因为我总是希望从查询中获取100条记录。我使用了少于100条记录的响应来指示数据库中没有更多记录。
SELECT
A.START_TIME, A.F1, A.F2, B.STRING
FROM
A
INNER JOIN B ON A.B_ID = B.ID
WHERE
A.START_TIME >= '2015-03-22 05:23:44'
LIMIT 0, 100;
这里是解释。对不起,格式为:
# id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra
1, SIMPLE, B, index, PRIMARY, FSN, 95, , 1, Using index; Using temporary; Using filesort
1, SIMPLE, A, ref, A_ix_B_ID,A_ix_C, A_ix_B_ID, 4, ag100_a$$burnaby.B.ID, 2, Using where
您可以使用'ctrl-k'将文本格式设置为代码。 –
现在你必须尝试每次添加一个表格http://importblogkit.com/2015/05/how-do-you-eat-an-elephant/你应该尝试每一个选择类型索引 –
这里一次添加一个表的结果:仅表A:8.7秒,表A和B:255秒。问题仍然存在,我的原始问题仍然存在:是否有一种重构此查询的方式,以便在从表A检索记录之后完成连接。这是非常重要的,因为这是一个非常常见的查询。 – user3341576