とOR条件のJOIN、TOKEN1、Token2やテーブル構造があり、MYSQL - 私は3つのテーブル(3万行を持っている)CompanyMasterを持って
CompanyMaster
CREATE TABLE `CompanyMaster` (
`CompanyUID` int(11) NOT NULL AUTO_INCREMENT,
`WebDomain` varchar(150) DEFAULT NULL,
`CompanyPrimaryName` varchar(200) DEFAULT NULL,
PRIMARY KEY (`CompanyUID`)
) ENGINE=InnoDB AUTO_INCREMENT=3941244 DEFAULT CHARSET=latin1
TOKEN1
CREATE TABLE `Token1`(
`CompanyUID` int(11) NOT NULL,
`Token` varchar(50) NOT NULL,
KEY `Token` (`Token`),
KEY `CompanyUID` (`CompanyUID`),
CONSTRAINT `CompanyAlias4_ibfk_1` FOREIGN KEY (`CompanyUID`) REFERENCES `CompanyMaster` (`CompanyUID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
トークン2
CREATE TABLE `Token2` (
`CompanyUID` int(11) NOT NULL,
`Token` varchar(100) NOT NULL,
KEY `Token` (`Token`),
KEY `CompanyUID` (`CompanyUID`),
CONSTRAINT `CompanyAlias5_ibfk_1` FOREIGN KEY (`CompanyUID`) REFERENCES `CompanyMaster` (`CompanyUID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Token1テーブルとToken2テーブルを使用してCompanyMasterテーブルからWebDomainを取得したいとします。
私が使用しているクエリは、このクエリが結果を得るために、ほぼ30秒かかり、
SELECT WebDomain FROM CompanyMaster WHERE CompanyUID IN (
SELECT CompanyUID FROM Token1 WHERE Token='appleinc'
UNION
SELECT CompanyUID FROM Token2 WHERE Token='d012233:q122100:')
です。私は< 100ミリ秒を取っているサブクエリを単独で実行しました。問題はIN条件です。
私は
SELECT c.CompanyUID FROM `CompanyMaster` c
JOIN `Token1` tk1
ON tk1.CompanyUID = c.CompanyUID AND tk1.Token= 'appleinc'
JOIN `Token2` tk2
ON tk2.CompanyUID = c.CompanyUID AND tk2.Token= 'd012233:q122100:'
、参加して、それが< 200ミリ秒で実行されていると、クエリを置き換えしかしtk1.Aliasの=「appleinc」またはtk2.Alias =「d012233場合は上記のクエリに問題が、次のとおりです。 q122100: 'は、空の行として出力しています。しかし、条件が1つしか一致しない場合でも、一致する行が必要です。
どうすればこの問題を解決できますか?また、クエリを10ミリ秒未満で実行する必要があります。それは達成可能ですか?
あなたのニーズに合った回答はありますか?あなたはコメントを残すことができますか? – trincot