我在2个不同的数据库中有2个表,两个都在同一台服务器上。我在2上运行联接,需要8分钟才能得到结果。
CREATE TABLE `ps_product_attribute` (
`id_product_attribute` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id_product` int(10) unsigned NOT NULL,
`reference` varchar(70) DEFAULT NULL,
`supplier_reference` varchar(32) DEFAULT NULL,
`location` varchar(64) DEFAULT NULL,
`ean13` varchar(13) DEFAULT NULL,
`upc` varchar(12) DEFAULT NULL,
`wholesale_price` decimal(20,6) NOT NULL DEFAULT '0.000000',
`price` decimal(20,6) NOT NULL DEFAULT '0.000000',
`ecotax` decimal(17,6) NOT NULL DEFAULT '0.000000',
`quantity` int(10) NOT NULL DEFAULT '0',
`weight` decimal(20,6) NOT NULL DEFAULT '0.000000',
`unit_price_impact` decimal(17,2) NOT NULL DEFAULT '0.00',
`default_on` tinyint(1) unsigned NOT NULL DEFAULT '0',
`minimal_quantity` int(10) unsigned NOT NULL DEFAULT '1',
`available_date` date NOT NULL,
`attribute_color` varchar(10) DEFAULT '#FFFFFF',
`swatch_url` varchar(100) DEFAULT NULL,
`a_createddate` datetime DEFAULT NULL,
`a_createdby` bigint(20) DEFAULT NULL,
`a_modifieddate` datetime DEFAULT NULL,
`a_modifiedby` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id_product_attribute`),
KEY `product_attribute_product` (`id_product`),
KEY `reference` (`reference`),
KEY `supplier_reference` (`supplier_reference`),
KEY `product_default` (`id_product`,`default_on`),
KEY `id_product_id_product_attribute` (`id_product_attribute`,`id_product`),
KEY `ps_product_attribute_ean13` (`ean13`)
) ENGINE=InnoDB AUTO_INCREMENT=143326 DEFAULT CHARSET=utf8
和另一个数据库中的第二个表。
CREATE TABLE `t_stockreserves` (
`a_stockreserveid` bigint(20) NOT NULL AUTO_INCREMENT,
`a_ean` varchar(13) DEFAULT NULL,
`a_basemarketplacereserve` int(11) DEFAULT NULL,
`a_marketplacereserve` int(11) DEFAULT NULL,
`a_criticalreserve` int(11) DEFAULT NULL,
`a_createddate` datetime DEFAULT NULL,
`a_createdby` bigint(20) DEFAULT NULL,
`a_modifieddate` datetime DEFAULT NULL,
`a_modifiedby` bigint(20) DEFAULT NULL,
PRIMARY KEY (`a_stockreserveid`),
UNIQUE KEY `t_stockreserves_ean_ind` (`a_ean`)
) ENGINE=InnoDB AUTO_INCREMENT=16855 DEFAULT CHARSET=latin1
我只是运行如下的查询
SELECT ps_product_attribute.id_product
FROM ps_product_attribute
LEFT JOIN `dropship`.`t_stockreserves` ON `t_stockreserves`.`a_ean` = `ps_product_attribute`.`ean13`
运行查询需要8分钟。这是explain命令输出
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE ps_product_attribute ALL NULL NULL NULL NULL 125960
1 SIMPLE t_stockreserves index NULL t_stockreserves_ean_ind 16 NULL 17083 Using index
这有什么问题吗?
答案 0 :(得分:0)
表的不同CHARSET和使用VARCHAR加入怎么样?
我会用具有相同字符集的表来测试它。