mysql选择连接速度很慢
我有两个表A和B.A有大约2900万行,而B是有大约1000行的临时表。mysql选择连接速度很慢
查询是如下 -
select DISTINCT Table_A.column_a from Table_B join Table_A on Table_B.ID_b = Table_A.ID_a;
我对(ID_A,column_a)
查询大约需要20秒来运行综合指数KEY2。
的解释是如下 -
------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------------+------+-----------------------------------------+---------------------------+---------+---------------------------------------+------+-----------------+
| 1 | SIMPLE | Table_B | ALL | NULL | NULL | NULL | NULL | 1507 | Using temporary |
| 1 | SIMPLE | Table_A | ref | key1 ,key2 | key2 | 3 | DB_name.Table_B.ID_b | 963 | Using index |
+----+-------------+-------------------+------+-----------------------------------------+---------------------------+---------+---------------------------------------+------+-----------------+
如何优化这个查询?
感谢
desc Table_A
| id | bigint(8) unsigned | NO | PRI | NULL | auto_increment |
| column_a | mediumint(8) unsigned | NO | MUL | | |
| column_1 | mediumint(8) unsigned | NO | MUL | | |
| id_a | mediumint(8) unsigned | NO | MUL | |
| column_2 | smallint(5) unsigned | NO | MUL | NULL | |
| column_3 | smallint(5) unsigned | NO | | NULL | |
| column_4 | smallint(5) unsigned | NO | MUL | NULL | |
| column_5 | smallint(5) unsigned | NO | | NULL | |
创建临时表B中的索引,列ID_B,你should'nt得到了的“使用临时在之后的‘额外’列,它应该会更好。使用CREATE INDEX语句。
添加索引,但仍然看到使用临时 – 2011-05-10 07:54:39
@kkszysiu - 添加索引,但仍然看到使用临时 – 2011-05-10 08:20:15
@regilero - - 添加索引,但仍然看到使用临时 – 2011-05-10 08:20:46
尝试使用以下列(column_a)在表格A上创建索引
我添加了一个索引和d说明仍然看起来相同 – 2011-05-10 07:52:47
column_a上的索引已存在 – 2011-05-10 07:59:46
在列上添加适当的索引。解释应该在那里帮助,它应该加快你的查询。
Extra | + ---- + ------ + ------------------------------ + | 1 | SIMPLE | Table_B |索引| ID_index | ID_index | 3 | NULL | 1507 |使用索引;使用临时|| 1 | SIMPLE |表_A | ref | key1,key2 | key2 | 3 | DB_name.Table_B.ID_b | 240 |使用索引 – 2011-05-10 07:57:50
@kkszysiuExtra | + ---- + ------ + ------------------------------ + | 1 | SIMPLE | Table_B | index | ID_index | ID_index | 3 | NULL | 1507 |使用索引;使用临时|| 1 | SIMPLE |表_A | ref | key1,key2 | key2 | 3 | DB_name.Table_B.ID_b | 240 |使用索引 - – 2011-05-10 08:19:33
不改变任何索引
编辑 我错过了指数的顺序,改变键2到(column_a,ID_A)
尝试:
select DISTINCT Table_A.column_a
from Table_A straight_join
Table_B on Table_B.ID_b = Table_A.ID_a;
PLS显示解释结果,TKX
@Neo - 没有帮助.-- + ------------------------------ + | 1 | SIMPLE |表_A |索引| key1,key2 | key2 | 6 | NULL | 29252089 |使用索引;使用临时| | 1 | SIMPLE | Table_B | ref | ID_index | ID_index | 3 | DN_name.Table_A.ID_a | 1 |使用索引;不同 – 2011-05-10 08:51:59
如何有关Table_A.column_a – Neo 2011-05-10 08:53:22
选择Table_A.column_a 从表-A STRAIGHT_JOIN 表-B上Table_B.ID_b = Table_A.ID_a组修改表-A索引键2到KEY2(column_a,ID_A) – Neo 2011-05-10 08:54:57
让表索引通过ID? – Luixv 2011-05-10 07:40:06
你在Table_B.ID_b上有索引吗? – 2011-05-10 07:40:52
请发表您的表格结构,tkx – Neo 2011-05-10 08:00:39