我一直在尝试在MySQL中的两个表上执行连接,并且在我没有获得结果之前,查询将运行一两分钟。我远不是数据库专家,所以我不确定我是否写得不好,如果我的MySQL设置配置不当,或者我真的应该用我的查询做其他事情。仅供参考,数据库位于我的机器本地。
我有一个大表(约200万条记录),其中一列是一个小表的ID(~3000条记录)。如果这很重要,ID在大表中不是唯一的,但在小表中是唯一的。我尝试了以下查询的各种风格,但似乎没有任何工作:
SELECT big_table.*,
small_table.col
FROM big_table
left outer join small_table on (big_table.small_id = small_table.id)
我正在对需要所有200万行的数据进行大量分析,但不一定在单个查询中。以下是我的“show create table”的结果:
'big_table', 'CREATE TABLE 'big_table' (
'BIG_ID_1', varchar(12) NOT NULL,
'BIG_ID_2', int(100) NOT NULL,
'SMALL_ID' varchar(8) DEFAULT NULL,
'TYPICAL_OTHER_COLUMN' varchar(3) DEFAULT NULL,
...
PRIMARY KEY ('BIG_ID_1', 'BIG_ID_2')
) ENGINE=MyISAM DEFAULT CHARSET=latin1'
'small_table', 'CREATE TABLE `small_table` (
`id`, varchar(8) NOT NULL DEFAULT '''',
`col`, varchar(1) DEFAULT NULL,
...
PRIMARY KEY (`id`),
KEY `inx_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1'
以下是我的一个候选查询的“解释”结果:
id select_type table type possible_keys key key_len ref rows extra 1 SIMPLE big_table ALL NULL NULL NULL NULL 1962193 1 SIMPLE small_table eq_ref PRIMARY,inx_id PRIMARY 10 db_name.big_table.SMALL_ID 1
答案 0 :(得分:3)
您在一个查询中选择了大约200万条记录。根据每行中的数据量,可能需要数百兆字节的数据。
您可能想尝试的事情:
SELECT table.*
。