我知道这是一个常见的问题,但是我找不到为什么使用这两个简单表的外部连接需要这么长时间的问题。
我确定他们都是我的,同一个角色。
创建表“pinventory”(
`项目'char(10)字符集latin1不为空,
`inventory`int(11)默认为空,
`store_id`char(10)字符集latin1默认为空,
`status`char(1)字符集latin1默认值为空,
`什么'int(11)默认为空,
主键(`article`),
关键字“article”(“article”)
)引擎=MyISAM默认字符集=utf8
--pinventory有59310行
创建表“products”(
`productid`int(11)不为空默认值“0”,
`产品代码“varchar(250)NOT NULL DEFAULT”,
`prodname“varchar(250)非空默认值”,
`prodtype`smallint(6)非空默认值'0',
...
主键(`productid`),
关键字“prodcode”(“prodcode”)
)引擎=MyISAM默认字符集=utf8
--产品有7978行
选择prodcode,prodname,“不在库存中”
来自产品
article=prodcode上的左外部联接pinventory
当项目为空时
;
--花费2分33秒并返回正确的476行
--解释
id select_type table type possible_keys key_len ref rows额外
1个简单产品全部(空)(空)(空)(空)7978
1个简单的pStand指数(NULL)初等10(NULL)59310使用何处;使用索引;不存在
内部连接需要.22秒
选择prodcode,prodname,“在库存中”
来自产品
JOIN pinventory ON article=产品代码
;
我试着将“article”改为varchar(250),这样join中的两个字段就完全一样了,但这没有帮助。
谢谢

最佳答案

您的键articleprodcode使用不同的字符集。

pinventory.article: char(10) CHARACTER SET latin1
products.prodcode: varchar(250) CHARACTER SET utf8

因此,数据库在连接时必须转换每个条目,这会大大降低连接速度。
尝试在两个字段上使用相同的字符集,您会感觉到不同。

关于mysql - 为什么我的mysql简单外部连接需要这么长时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17116514/

10-10 17:43
查看更多