我当前正在尝试执行的MySQL查询在功能上等同于以下内容:
SELECT small_table.A, small_table.B, small_table.C, huge_table.X, huge_table.Y
FROM small_table LEFT JOIN huge_table
ON small_table.D = huge_table.Z
WHERE small_table.E = 'blah'除了查询似乎没有终止(至少在合理的时间内没有),可能是因为第二个表很大(即7500行,总大小为3MB)。我是否可以在合理的时间内执行功能等价的连接,或者我是否需要通过将大表中的列添加到小表中来引入冗余。(我完全是SQL的初学者。)
子句WHERE small_table.E = 'blah'是静态的,'blah'永远不会改变。
以下是请求的EXPLAIN输出:
Array ( [0] => Array ( [0] => 1 [id] => 1 [1] => SIMPLE [select_type] => SIMPLE [2] => small_table [table] => small_table [3] => ref [type] => ref [4] => E [possible_keys] => E [5] => E [key] => E [6] => 1 [key_len] => 1 [7] => const [ref] => const [8] => 1064 [rows] => 1064 [9] => Using where [Extra] => Using where ) [1] => Array ( [0] => 1 [id] => 1 [1] => SIMPLE [select_type] => SIMPLE [2] => huge_table [table] => huge_table [3] => eq_ref [type] => eq_ref [4] => PRIMARY [possible_keys] => PRIMARY [5] => PRIMARY [key] => PRIMARY [6] => 4 [key_len] => 4 [7] => my_database.small_table.D [ref] => my_database.small_table.D [8] => 1 [rows] => 1 [9] => [Extra] => ) )
发布于 2012-08-07 15:04:01
一些事情..。
1)您是直接在MySQL ( Workbench GUI或命令行)中执行此查询,还是将此查询嵌入到PHP代码中?您的解释输出似乎建议使用PHP。如果您还没有这样做,请尝试直接在MySQL中执行查询,并将其排除在外。
2)你的EXPLAIN输出看起来不错,除了我想知道你的WHERE子句和small_table.E = 'blah'有什么不同。EXPLAIN输出显示列E上有一个索引,但键长度= 1,这与'blah'的比较结果不一致。您对small_table.E的列定义使用了哪种数据类型
3) MySQL估计它需要在small_table中扫描1064行。small_table中总共有多少行,您希望有多少行与此特定查询匹配?
https://stackoverflow.com/questions/11838565
复制相似问题