簡體   English   中英

左聯接的MySQL查詢性能問題

[英]Mysql query performance issue with left join

我在數據庫中有3個表。 第一張表有15萬條記錄,第二張表有175k條記錄,第三張表有210萬條記錄。 我需要使用上面3個表的輸出。 因此,我使用內部聯接在上面的3個表中聯接,並獲得了具有1.5k條記錄的輸出,但是執行需要8個小時的時間。

我在聯接表中使用了主鍵。 如何提高性能?

我試圖添加索引,下面是腳本和代碼

下表有15萬條記錄

 CREATE TABLE `us_input_opp_oppheader` (
    `accountId` varchar(100) NOT NULL,
    `accountName` varchar(200) DEFAULT NULL,
    `objectId` varchar(100) NOT NULL,
    `processType` varchar(100) DEFAULT NULL,
    `description` varchar(250) DEFAULT NULL,
    `noOfLines` int(11) DEFAULT NULL,
    PRIMARY KEY (`accountId`,`objectId`),
    KEY `objectId` 
    (`objectId`,`description`,`accountId`,`accountName`,`noOfLines`)
    )ENGINE=InnoDB DEFAULT CHARSET=latin1;

下表有17.5萬記錄

CREATE TABLE `us_input_opp_oppitem` (
  `objectId` bigint(20) NOT NULL,
  `createdBy` varchar(100) DEFAULT NULL,
  `changedBy` varchar(100) DEFAULT NULL,
  `numberInt` varchar(100) NOT NULL,
  PRIMARY KEY (`objectId`,`numberInt`),
  KEY `objectId` (`objectId`,`createdBy`,`changedBy`,`numberInt`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

下表有210萬條記錄

CREATE TABLE `us_input_opp_oppsalesteam` (
  `transactionNumber` varchar(100) NOT NULL,
  `item` varchar(100) NOT NULL,
  `partnerFunction` varchar(100) DEFAULT NULL,
  `partnerFunctionText` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`transactionNumber`,`item`),
  KEY `item` (`item`,`partnerFunction`,`partnerFunctionText`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


SELECT oh.objectId, oh.description, oi.`createdBy`, oi.`changedBy`, oh.description, oh.processType, 
os.`item`, os.`partnerFunction`, os.`partnerFunctionText`     
FROM us_input_opp_oppheader oh 
LEFT join us_input_opp_oppitem oi ON oi.objectId = oh.objectId 
LEFT join us_input_opp_oppsalesteam os ON os.transactionNumber = oh.objectId 
WHERE (os.Item != 0 OR oh.noOfLines = 0) 
GROUP BY oh.objectId, oi.numberInt;

我認為如果您使用內部聯接或聯接而不是左聯接,則將花費更短的時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM