我正在模拟完全连接,方法是先进行左连接,然后进行右连接,其中“左表连接列为null”。 问题:我得到了不同的执行计划-右联接明显变慢,我希望它与左联接计划一样好。 我知道kod_prod列在两个表中具有不同的类型,但是我不知道那是什么影响性能。这是我的表定义和计划:
| panel_nowy | CREATE TABLE `pn` (
`Miesiac` char(20) DEFAULT NULL,
`kod_prod` int(11) DEFAULT NULL,
`SKU` char(255) DEFAULT NULL,
`Nazwa` char(80) DEFAULT NULL,
`Molekula` char(255) DEFAULT NULL,
`ATC4` char(20) DEFAULT NULL,
`Kategoria_odplatnosci` char(20) DEFAULT NULL,
`Specjalizacja` char(50) DEFAULT NULL,
`Plec_pacjenta` char(20) DEFAULT NULL,
`Wiek_pacjenta` char(20) DEFAULT NULL,
`iloscopak` char(12) DEFAULT NULL,
`Opakowania` double(20,3) DEFAULT NULL,
`Recepty` double(20,3) DEFAULT NULL,
`DDD` double(20,3) DEFAULT NULL,
`SU` double(20,3) DEFAULT NULL,
KEY `a` (`Miesiac`,`kod_prod`,`Specjalizacja`,`Wiek_pacjenta`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
panel_stary | CREATE TABLE `ps` (
`Miesiac` char(20) DEFAULT NULL,
`kod_prod` char(16) DEFAULT NULL,
`SKU` char(255) DEFAULT NULL,
`Nazwa` char(80) DEFAULT NULL,
`Molekula` char(255) DEFAULT NULL,
`ATC4` char(20) DEFAULT NULL,
`Kategoria_odplatnosci` char(20) DEFAULT NULL,
`Specjalizacja` char(50) DEFAULT NULL,
`Plec_pacjenta` char(20) DEFAULT NULL,
`Wiek_pacjenta` char(20) DEFAULT NULL,
`iloscopak` char(12) DEFAULT NULL,
`Opakowania` double(20,3) DEFAULT NULL,
`Recepty` double(20,3) DEFAULT NULL,
`DDD` double(20,3) DEFAULT NULL,
`SU` double(20,3) DEFAULT NULL,
KEY `a` (`Miesiac`,`kod_prod`,`Specjalizacja`,`Wiek_pacjenta`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
explain select s.Miesiac, s.kod_prod, s.SKU, s.Nazwa, s.Molekula, s.ATC4, left(s.ATC4,3) ATC2, left(s.ATC4,1) ATC1, s.Kategoria_odplatnosci, s.Specjalizacja, s.Plec_pacjenta, s.Wiek_pacjenta, s.iloscopak, s.Opakowania OpakowaniaS, s.Recepty ReceptyS, s.DDD DDDS, s.SU SUS, n.Opakowania OpakowaniaN, n.Recepty ReceptyN, n.DDD DDDN, n.SU SUN from jzs.ps s left join jzs.pn n using (Miesiac, kod_prod, Kategoria_odplatnosci, Specjalizacja, Plec_pacjenta, Wiek_pacjenta, iloscopak) where s.Miesiac='2018-08' ;
| id | select_type |桌子|类型可能的钥匙|关键key_len |参考|行|额外|
| 1 |简单s |参考|一个|一个| 21 | const | 1313241 |在哪里|
| 1 |简单n |参考|一个|一个| 98 | const,jzs.s.kod_prod,jzs.s.Specjalizacja,jzs.s.Wiek_pacjenta | 2 | |
explain select n.Miesiac, n.kod_prod, n.SKU, n.Nazwa, n.Molekula, n.ATC4, left(n.ATC4,3) ATC2, left(n.ATC4,1) ATC1, n.Kategoria_odplatnosci, n.Specjalizacja, n.Plec_pacjenta, n.Wiek_pacjenta, n.iloscopak, s.Opakowania OpakowaniaS, s.Recepty ReceptyS, s.DDD DDDS, s.SU SUS, n.Opakowania OpakowaniaN, n.Recepty ReceptyN, n.DDD DDDN, n.SU SUN from jzs.ps s right join jzs.pn n using (Miesiac, kod_prod, Kategoria_odplatnosci, Specjalizacja, Plec_pacjenta, Wiek_pacjenta, iloscopak) where n.Miesiac= '2018-08' ;
| id | select_type |桌子|类型可能的钥匙|关键key_len |参考|行|额外|
| 1 |简单n |参考|一个|一个| 21 | const | 1093192 |在哪里|
| 1 |简单s |参考|一个|一个| 21 | const | 1313241 | |