【问题标题】:Mysql view with join multiple table results in slow query连接多个表的Mysql视图导致查询缓慢
【发布时间】:2015-06-24 02:05:28
【问题描述】:

我目前正在创建一个将连接多个表的视图。我可以使用左连接得到结果,但是查询加载速度很慢。我也尝试过使用 Inner Join,但没有显示任何结果。反正有没有让我的查询快速? 下面是代码:

CREATE 
ALGORITHM = UNDEFINED 
DEFINER = `root`@`%` 
SQL SECURITY DEFINER
VIEW `prc`.`vsrparts_latest` AS
SELECT 
    `prc`.`tbsrparts_new`.`SRPartsID` AS `SRPartsID`,
    `prc`.`tbsrparts_new`.`RepairID` AS `RepairID`,
    `prc`.`tbsrparts_new`.`SRNo` AS `SRNo`,
    `prc`.`tbsrparts_new`.`DateReceived` AS `DateReceived`,
    `prc`.`tbsrparts_new`.`ShipmentDate` AS `ShipmentDate`,
    `prc`.`tbparts`.`PartsNo` AS `PartsNo`,
    `prc`.`tbsrparts_new`.`PartID` AS `PartID`,
    `prc`.`tbparts`.`PartsDesc` AS `PartsDesc`,
    `prc`.`tbcompany`.`Company` AS `Company`,
    `prc`.`tbcompany`.`Alias` AS `Alias`,
    `prc`.`tbsrparts_new`.`RepairCenter` AS `RepairCenter`,
    `prc`.`tbsrparts_new`.`UserID` AS `UserID`,
    `prc`.`tbsrparts_new`.`NinetyDaysReturn` AS `NinetyDaysReturn`,
    `prc`.`tbsrparts_new`.`PartSN` AS `PartSN`,
    `prc`.`tbsrparts_new`.`RefurbishedSN` AS `RefurbishedSN`,
    `prc`.`tbsrparts_new`.`CountFrequency` AS `CountFrequency`,
    `prc`.`tbuser`.`EmployeeID` AS `EmployeeID`,
    `vpartsinfo`.`PartsNo` AS `FinalPart`,
    `prc`.`tbsrparts_new`.`FinalPart` AS `FinalPartID`,
    `prc`.`tbsrparts_new`.`EcoImplemented` AS `EcoImplemented`,
    `prc`.`tbsrparts_new`.`VisualInspectionStatus` AS `VisualInspectionStatus`,
    `prc`.`tbvisual`.`VisualInspectionErrorCode` AS `VisualInspectionErrorCode`,
    `prc`.`tbvisual`.`VisualInspectionActionTaken` AS `VisualInspectionActionTaken`,
    `prc`.`tbvisual`.`VisualInspectionComponentLocation` AS `VisualInspectionComponentLocation`,
    `prc`.`tbsrparts_new`.`VisualInspectionResult` AS `VisualInspectionResult`,
    `prc`.`tbsrparts_new`.`DebugTestingStatus` AS `DebugTestingStatus`,
    `prc`.`tb1stdebug`.`FirstDebugTestingErrorCode` AS `FirstDebugTestingErrorCode`,
    `prc`.`tb1stdebug`.`FirstDebugActionTaken` AS `FirstDebugActionTaken`,
    `prc`.`tb1stdebug`.`FirstDebugComponentLocation` AS `FirstDebugComponentLocation`,
    `prc`.`tb2nddebug`.`SecondDebugTestingErrorCode` AS `SecondDebugTestingErrorCode`,
    `prc`.`tb2nddebug`.`SecondDebugActionTaken` AS `SecondDebugActionTaken`,
    `prc`.`tb2nddebug`.`SecondDebugComponentLocation` AS `SecondDebugComponentLocation`,
    `prc`.`tb3rddebug`.`ThirdDebugTestingErrorCode` AS `ThirdDebugTestingErrorCode`,
    `prc`.`tb3rddebug`.`ThirdDebugActionTaken` AS `ThirdDebugActionTaken`,
    `prc`.`tb3rddebug`.`ThirdDebugComponentLocation` AS `ThirdDebugComponentLocation`,
    `prc`.`tbsrparts_new`.`DebugTestingResult` AS `DebugTestingResult`,
    `prc`.`tbsrparts_new`.`FctTestingStatus` AS `FctTestingStatus`,
    `prc`.`tb1stfct`.`FirstFctTestingErrorCode` AS `FirstFctTestingErrorCode`,
    `prc`.`tb1stfct`.`FirstFctActionTaken` AS `FirstFctActionTaken`,
    `prc`.`tb1stfct`.`FirstFctComponentLocation` AS `FirstFctComponentLocation`,
    `prc`.`tb2ndfct`.`SecondFctTestingErrorCode` AS `SecondFctTestingErrorCode`,
    `prc`.`tb2ndfct`.`SecondFctActionTaken` AS `SecondFctActionTaken`,
    `prc`.`tb2ndfct`.`SecondFctComponentLocation` AS `SecondFctComponentLocation`,
    `prc`.`tb3rdfct`.`ThirdFctTestingErrorCode` AS `ThirdFctTestingErrorCode`,
    `prc`.`tb3rdfct`.`ThirdFctActionTaken` AS `ThirdFctActionTaken`,
    `prc`.`tb3rdfct`.`ThirdFctComponentLocation` AS `ThirdFctComponentLocation`,
    `prc`.`tbsrparts_new`.`FctTestingResult` AS `FctTestingResult`,
    `prc`.`tbsrparts_new`.`RelayFailure` AS `RelayFailure`,
    `prc`.`tbsrparts_new`.`RelayDateCode` AS `RelayDateCode`,
    `prc`.`tbsrparts_new`.`DefectiveRelayColor` AS `DefectiveRelayColor`,
    `prc`.`tbsrparts_new`.`RelayFailureLocation` AS `RelayFailureLocation`,
    `prc`.`tbsrparts_new`.`DateCreated` AS `DateCreated`,
    `prc`.`tbsrparts_new`.`LastUpdated` AS `LastUpdated`,
    `prc`.`tbsrparts_new`.`EstimatedRepairCompletionDate` AS `EstimatedRepairCompletionDate`,
    `prc`.`tbsrparts_new`.`StartRepairDate` AS `StartRepairDate`,
    `prc`.`tbsrparts_new`.`Status` AS `Status`,
    `prc`.`tbsrparts_new`.`AttachmentName` AS `AttachmentName`,
    `prc`.`tbsrparts_new`.`PartsReturnProcess` AS `PartsReturnProcess`,
    (TO_DAYS(CURDATE()) - TO_DAYS(STR_TO_DATE(REPLACE(`prc`.`tbsrparts_new`.`DateReceived`,
                        ',',
                        '-'),
                    '%d-%M-%Y'))) AS `dateNew`
FROM
    (((((((((((`prc`.`tbsrparts_new`
    JOIN `prc`.`tbparts` ON ((`prc`.`tbsrparts_new`.`PartID` = `prc`.`tbparts`.`PartsID`)))
    JOIN `prc`.`tbcompany` ON ((`prc`.`tbsrparts_new`.`RepairCenter` = `prc`.`tbcompany`.`CompanyID`)))
    JOIN `prc`.`vpartsinfo` ON ((`vpartsinfo`.`PartsID` = `prc`.`tbsrparts_new`.`FinalPart`)))
    JOIN `prc`.`tbuser` ON ((`prc`.`tbsrparts_new`.`UserID` = `prc`.`tbuser`.`UserID`)))
    LEFT JOIN `prc`.`tbvisual` ON ((`prc`.`tbsrparts_new`.`RepairID` = `prc`.`tbvisual`.`RepairID`)))
    LEFT JOIN `prc`.`tb1stdebug` ON ((`prc`.`tbsrparts_new`.`RepairID` = `prc`.`tb1stdebug`.`RepairID`)))
    LEFT JOIN `prc`.`tb2nddebug` ON ((`prc`.`tbsrparts_new`.`RepairID` = `prc`.`tb2nddebug`.`RepairID`)))
    LEFT JOIN `prc`.`tb3rddebug` ON ((`prc`.`tbsrparts_new`.`RepairID` = `prc`.`tb3rddebug`.`RepairID`)))
    LEFT JOIN `prc`.`tb1stfct` ON ((`prc`.`tbsrparts_new`.`RepairID` = `prc`.`tb1stfct`.`RepairID`)))
    LEFT JOIN `prc`.`tb2ndfct` ON ((`prc`.`tbsrparts_new`.`RepairID` = `prc`.`tb2ndfct`.`RepairID`)))
    LEFT JOIN `prc`.`tb3rdfct` ON ((`prc`.`tbsrparts_new`.`RepairID` = `prc`.`tb3rdfct`.`RepairID`)))
ORDER BY `prc`.`tbsrparts_new`.`SRPartsID` DESC

以下是表的架构:

tbsrparts_new

+-------------------------------+--------------------+------+-----+---------+----------------+
|             Field             |        Type        | Null | Key | Default |     Extra      |
+-------------------------------+--------------------+------+-----+---------+----------------+
| SRPartsID                     | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                      | varchar(200)       | NO   |     | NULL    |                |
| SRNo                          | varchar(200)       | YES  | MUL | NULL    |                |
| DateReceived                  | varchar(200)       | YES  |     | NULL    |                |
| ShipmentDate                  | varchar(200)       | YES  |     | NULL    |                |
| NinetyDaysReturn              | varchar(200)       | YES  |     | NULL    |                |
| PartID                        | varchar(200)       | YES  |     | NULL    |                |
| PartSN                        | varchar(200)       | YES  |     | NULL    |                |
| RefurbishedSN                 | varchar(200)       | YES  |     | NULL    |                |
| FinalPart                     | varchar(200)       | YES  |     | NULL    |                |
| DefectPart                    | varchar(200)       | YES  |     | NULL    |                |
| RelayFailure                  | varchar(200)       | YES  |     | NULL    |                |
| RelayDateCode                 | varchar(200)       | YES  |     | NULL    |                |
| DefectiveRelayColor           | varchar(200)       | YES  |     | NULL    |                |
| RelayFailureLocation          | varchar(200)       | YES  |     | NULL    |                |
| RepairCenter                  | varchar(200)       | YES  |     | NULL    |                |
| UserID                        | varchar(200)       | YES  |     | NULL    |                |
| DateCreated                   | varchar(45)        | YES  |     | NULL    |                |
| LastUpdated                   | varchar(45)        | YES  |     | NULL    |                |
| LastUpdatedBy                 | varchar(45)        | YES  |     | NULL    |                |
| EstimatedRepairCompletionDate | varchar(45)        | YES  |     | NULL    |                |
| StartRepairDate               | varchar(45)        | YES  |     | NULL    |                |
| Attachment                    | longblob           | YES  |     | NULL    |                |
| AttachmentName                | varchar(45)        | YES  |     | NULL    |                |
| AttachmentType                | varchar(45)        | YES  |     | NULL    |                |
| AttachmentSize                | varchar(45)        | YES  |     | NULL    |                |
| PartsReturnProcess            | varchar(45)        | YES  |     | NULL    |                |
| EcoImplemented                | varchar(45)        | YES  |     | NULL    |                |
| CountFrequency                | varchar(45)        | YES  |     | NULL    |                |
| VisualInspectionStatus        | varchar(200)       | YES  |     | NULL    |                |
| VisualInspectionResult        | varchar(200)       | YES  |     | NULL    |                |
| DebugTestingStatus            | varchar(200)       | YES  |     | NULL    |                |
| DebugTestingResult            | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingStatus              | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingResult              | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingErrorCode           | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingActionTaken         | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingComponentLocation   | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingDesignator          | varchar(200)       | YES  |     | NULL    |                |
| FctTestingStatus              | varchar(200)       | YES  |     | NULL    |                |
| FctTestingResult              | varchar(200)       | YES  |     | NULL    |                |
| Status                        | varchar(40)        | YES  |     | NULL    |                |
+-------------------------------+--------------------+------+-----+---------+----------------+

tbuser

+---------------+--------------------+------+-----+---------+----------------+
|     Field     |        Type        | Null | Key | Default |     Extra      |
+---------------+--------------------+------+-----+---------+----------------+
| UserID        | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| Username      | varchar(500)       | YES  |     | NULL    |                |
| Password      | varchar(500)       | YES  |     | NULL    |                |
| Name          | varchar(500)       | YES  |     | NULL    |                |
| EmployeeID    | varchar(500)       | YES  | MUL | NULL    |                |
| Email         | varchar(500)       | YES  |     | NULL    |                |
| StatusID      | "int(10) unsigned" | YES  |     | NULL    |                |
| AuthorityID   | "int(10) unsigned" | YES  |     | NULL    |                |
| CompanyID     | "int(10) unsigned" | YES  |     | NULL    |                |
| LastUpdated   | varchar(50)        | YES  |     | NULL    |                |
| LastUpdatedBy | varchar(45)        | YES  |     | NULL    |                |
| LastLogin     | varchar(45)        | YES  |     | N/A     |                |
+---------------+--------------------+------+-----+---------+----------------+

tbparts

+-----------------+--------------------+------+-----+---------+----------------+
|      Field      |        Type        | Null | Key | Default |     Extra      |
+-----------------+--------------------+------+-----+---------+----------------+
| PartsID         | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| PartsNo         | varchar(20)        | NO   | MUL | NULL    |                |
| PartsDesc       | varchar(100)       | YES  |     | NULL    |                |
| CompanyID       | "int(10) unsigned" | NO   |     | NULL    |                |
| UserID          | "int(10) unsigned" | YES  |     | NULL    |                |
| LastUpdatedTime | varchar(45)        | YES  |     | NULL    |                |
| Category        | varchar(45)        | YES  |     | NULL    |                |
+-----------------+--------------------+------+-----+---------+----------------+

tbcompany

+--------------+--------------------+------+-----+---------+----------------+
|    Field     |        Type        | Null | Key | Default |     Extra      |
+--------------+--------------------+------+-----+---------+----------------+
| CompanyID    | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| Company      | varchar(45)        | NO   | MUL | NULL    |                |
| Alias        | varchar(45)        | YES  |     | NULL    |                |
| SupplierCode | varchar(45)        | NO   |     | NULL    |                |
+--------------+--------------------+------+-----+---------+----------------+

vpartsinfo

+-----------------+--------------------+------+-----+---------+-------+
|      Field      |        Type        | Null | Key | Default | Extra |
+-----------------+--------------------+------+-----+---------+-------+
| PartsID         | "int(10) unsigned" | NO   |     | 0       |       |
| PartsNo         | varchar(20)        | NO   |     | NULL    |       |
| PartsDesc       | varchar(100)       | YES  |     | NULL    |       |
| CompanyID       | "int(10) unsigned" | NO   |     | NULL    |       |
| UserID          | "int(10) unsigned" | YES  |     | NULL    |       |
| LastUpdatedTime | varchar(45)        | YES  |     | NULL    |       |
| Company         | varchar(45)        | NO   |     | NULL    |       |
| Name            | varchar(500)       | YES  |     | NULL    |       |
+-----------------+--------------------+------+-----+---------+-------+

tb1stdebug

+-----------------------------+--------------------+------+-----+---------+----------------+
|            Field            |        Type        | Null | Key | Default |     Extra      |
+-----------------------------+--------------------+------+-----+---------+----------------+
| FirstDebugID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                    | varchar(500)       | YES  |     | NULL    |                |
| FirstDebugTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| FirstDebugActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| FirstDebugComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+-----------------------------+--------------------+------+-----+---------+----------------+

tb2nddebug

+-----------------------------+--------------------+------+-----+---------+----------------+
|            Field            |        Type        | Null | Key | Default |     Extra      |
+-----------------------------+--------------------+------+-----+---------+----------------+
| SecondDebugID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                     | varchar(500)       | YES  |     | NULL    |                |
| SecondDebugTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| SecondDebugActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| SecondDebugComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+-----------------------------+--------------------+------+-----+---------+----------------+

tb3rddebug

+-----------------------------+--------------------+------+-----+---------+----------------+
|            Field            |        Type        | Null | Key | Default |     Extra      |
+-----------------------------+--------------------+------+-----+---------+----------------+
| ThirdDebugID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                    | varchar(500)       | YES  |     | NULL    |                |
| ThirdDebugTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| ThirdDebugActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| ThirdDebugComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+-----------------------------+--------------------+------+-----+---------+----------------+

tb1stfct

+---------------------------+--------------------+------+-----+---------+----------------+
|           Field           |        Type        | Null | Key | Default |     Extra      |
+---------------------------+--------------------+------+-----+---------+----------------+
| FirstFctID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                  | varchar(45)        | YES  |     | NULL    |                |
| FirstFctTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| FirstFctActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| FirstFctComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+---------------------------+--------------------+------+-----+---------+----------------+

tb2ndfct

+----------------------------+--------------------+------+-----+---------+----------------+
|           Field            |        Type        | Null | Key | Default |     Extra      |
+----------------------------+--------------------+------+-----+---------+----------------+
| SecondFctID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                   | varchar(45)        | YES  |     | NULL    |                |
| SecondFctTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| SecondFctActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| SecondFctComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+----------------------------+--------------------+------+-----+---------+----------------+

tb3rdfct

+---------------------------+--------------------+------+-----+---------+----------------+
|           Field           |        Type        | Null | Key | Default |     Extra      |
+---------------------------+--------------------+------+-----+---------+----------------+
| ThirdFctID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                  | varchar(45)        | YES  |     | NULL    |                |
| ThirdFctTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| ThirdFctActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| ThirdFctComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+---------------------------+--------------------+------+-----+---------+----------------+

tbvisual

+-----------------------------------+--------------------+------+-----+---------+----------------+
|               Field               |        Type        | Null | Key | Default |     Extra      |
+-----------------------------------+--------------------+------+-----+---------+----------------+
| VisualID                          | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                          | varchar(45)        | YES  |     | NULL    |                |
| VisualInspectionErrorCode         | varchar(500)       | YES  | MUL | NULL    |                |
| VisualInspectionActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| VisualInspectionComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+-----------------------------------+--------------------+------+-----+---------+----------------+

【问题讨论】:

  • @DrewPierce,我已经为所有列创建了索引。还是很慢。
  • 嗨@DrewPierce,有什么办法让它快点?你能给我建议吗?
  • @DrewPierce,我已经粘贴了与查询相关的表模式。希望你能帮助我。
  • 太好了,我们来看看
  • 嗨@DrewPierce,你能给我建议任何解决方案吗?

标签: mysql join view


【解决方案1】:

(A) 首先运行explain select [the whole select and join] 并将输出保存在某处。

(B) 我计算了 14 个缺失索引,我在下表中的 Key 列中将它们表示为 MISS。尽管表中有主键,但您正在执行表扫描而不使用索引。

在您的 From 子句中,您可以在最右侧看到 19 个 NO cmets。但实际上总共有 14 个失踪

(C) 考虑创建所有 14 个缺失的键(这自然会减慢插入速度)。

alter table tbsrparts_new add index(RepairID);
alter table tbsrparts_new add index(PartID);
alter table tbsrparts_new add index(FinalPart);
alter table tbsrparts_new add index(DefectPart);
alter table tbsrparts_new add index(RepairCenter);
alter table tbsrparts_new add index(UserID);
alter table vpartsinfo add index(PartsID);
alter table tb1stdebug add index(RepairID);
alter table tb2nddebug add index(RepairID);
alter table tb3rddebug add index(RepairID);
alter table tb1stfct add index(RepairID);
alter table tb2ndfct add index(RepairID);
alter table tb3rdfct add index(RepairID);
alter table tbvisual add index(RepairID);

(D) 运行 explain select [the whole select and join] 并将输出保存在某处。

(E) 与问题分享 (A) 和 (D) 的结果,以便在您需要进一步帮助时有人可以帮助您。

(F) 开心时创建你的视图。

祝你好运!

SELECT 
    new.SRPartsID AS SRPartsID,
    new.RepairID AS RepairID,
    new.SRNo AS SRNo,
    new.DateReceived AS DateReceived,
    new.ShipmentDate AS ShipmentDate,
    tbparts.PartsNo AS PartsNo,
    new.PartID AS PartID,
    tbparts.PartsDesc AS PartsDesc,
    tbcompany.Company AS Company,
    tbcompany.Alias AS Alias,
    new.RepairCenter AS RepairCenter,
    new.UserID AS UserID,
    new.NinetyDaysReturn AS NinetyDaysReturn,
    new.PartSN AS PartSN,
    new.RefurbishedSN AS RefurbishedSN,
    new.CountFrequency AS CountFrequency,
    tbuser.EmployeeID AS EmployeeID,
    vpartsinfo.PartsNo AS FinalPart,
    new.FinalPart AS FinalPartID,
    new.EcoImplemented AS EcoImplemented,
    new.VisualInspectionStatus AS VisualInspectionStatus,
    tbvisual.VisualInspectionErrorCode AS VisualInspectionErrorCode,
    tbvisual.VisualInspectionActionTaken AS VisualInspectionActionTaken,
    tbvisual.VisualInspectionComponentLocation AS VisualInspectionComponentLocation,
    new.VisualInspectionResult AS VisualInspectionResult,
    new.DebugTestingStatus AS DebugTestingStatus,
    prc.tb1stdebug.FirstDebugTestingErrorCode AS FirstDebugTestingErrorCode,
    prc.tb1stdebug.FirstDebugActionTaken AS FirstDebugActionTaken,
    prc.tb1stdebug.FirstDebugComponentLocation AS FirstDebugComponentLocation,
    prc.tb2nddebug.SecondDebugTestingErrorCode AS SecondDebugTestingErrorCode,
    prc.tb2nddebug.SecondDebugActionTaken AS SecondDebugActionTaken,
    prc.tb2nddebug.SecondDebugComponentLocation AS SecondDebugComponentLocation,
    prc.tb3rddebug.ThirdDebugTestingErrorCode AS ThirdDebugTestingErrorCode,
    prc.tb3rddebug.ThirdDebugActionTaken AS ThirdDebugActionTaken,
    prc.tb3rddebug.ThirdDebugComponentLocation AS ThirdDebugComponentLocation,
    new.DebugTestingResult AS DebugTestingResult,
    new.FctTestingStatus AS FctTestingStatus,
    tb1stfct.FirstFctTestingErrorCode AS FirstFctTestingErrorCode,
    tb1stfct.FirstFctActionTaken AS FirstFctActionTaken,
    tb1stfct.FirstFctComponentLocation AS FirstFctComponentLocation,
    tb2ndfct.SecondFctTestingErrorCode AS SecondFctTestingErrorCode,
    tb2ndfct.SecondFctActionTaken AS SecondFctActionTaken,
    tb2ndfct.SecondFctComponentLocation AS SecondFctComponentLocation,
    tb3rdfct.ThirdFctTestingErrorCode AS ThirdFctTestingErrorCode,
    tb3rdfct.ThirdFctActionTaken AS ThirdFctActionTaken,
    tb3rdfct.ThirdFctComponentLocation AS ThirdFctComponentLocation,
    new.FctTestingResult AS FctTestingResult,
    new.RelayFailure AS RelayFailure,
    new.RelayDateCode AS RelayDateCode,
    new.DefectiveRelayColor AS DefectiveRelayColor,
    new.RelayFailureLocation AS RelayFailureLocation,
    new.DateCreated AS DateCreated,
    new.LastUpdated AS LastUpdated,
    new.EstimatedRepairCompletionDate AS EstimatedRepairCompletionDate,
    new.StartRepairDate AS StartRepairDate,
    new.Status AS Status,
    new.AttachmentName AS AttachmentName,
    new.PartsReturnProcess AS PartsReturnProcess,
    (TO_DAYS(CURDATE()) - TO_DAYS(STR_TO_DATE(REPLACE(new.DateReceived,
                        ',',
                        '-'),
                    '%d-%M-%Y'))) AS dateNew
FROM
    tbsrparts_new new
    JOIN tbparts ON tbsrparts_new.PartID=tbparts.PartsId    -- indexes there: **NO**, Yes
    JOIN tbcompany ON tbsrparts_new.RepairCenter = tbcompany.CompanyID -- indexes there: **NO** , Yes
    JOIN vpartsinfo ON vpartsinfo.PartsID = new.FinalPart -- indexes there: **NO**, **NO**

    JOIN tbuser ON new.UserID = tbuser.UserID -- indexes there: **NO**, Yes
    LEFT JOIN tbvisual ON new.RepairID = tbvisual.RepairID -- indexes there: **NO**, **NO**
    LEFT JOIN tb1stdebug ON new.RepairID = tb1stdebug.RepairID -- indexes there: **NO**, **NO**

    LEFT JOIN tb2nddebug ON new.RepairID = tb2nddebug.RepairID -- indexes there: **NO**, **NO**
    LEFT JOIN tb3rddebug ON new.RepairID = tb3rddebug.RepairID -- indexes there: **NO**, **NO**
    LEFT JOIN tb1stfct ON new.RepairID = tb1stfct.RepairID -- indexes there: **NO**, **NO**

    LEFT JOIN tb2ndfct ON new.RepairID = tb2ndfct.RepairID -- indexes there: **NO**, **NO**
    LEFT JOIN tb3rdfct ON new.RepairID = tb3rdfct.RepairID -- indexes there: **NO**, **NO**
ORDER BY new.SRPartsID DESC

以下是相关表的架构。请注意我在答案开头的评论(B):

tbsrparts_new

+-------------------------------+--------------------+------+-----+---------+----------------+
|             Field             |        Type        | Null | Key | Default |     Extra      |
+-------------------------------+--------------------+------+-----+---------+----------------+
| SRPartsID                     | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                      | varchar(200)       | NO   |MISS | NULL    |                |
| SRNo                          | varchar(200)       | YES  | MUL | NULL    |                |
| DateReceived                  | varchar(200)       | YES  |     | NULL    |                |
| ShipmentDate                  | varchar(200)       | YES  |     | NULL    |                |
| NinetyDaysReturn              | varchar(200)       | YES  |     | NULL    |                |
| PartID                        | varchar(200)       | YES  |MISS | NULL    |                |
| PartSN                        | varchar(200)       | YES  |     | NULL    |                |
| RefurbishedSN                 | varchar(200)       | YES  |     | NULL    |                |
| FinalPart                     | varchar(200)       | YES  |MISS | NULL    |                |
| DefectPart                    | varchar(200)       | YES  |MISS | NULL    |                |
| RelayFailure                  | varchar(200)       | YES  |     | NULL    |                |
| RelayDateCode                 | varchar(200)       | YES  |     | NULL    |                |
| DefectiveRelayColor           | varchar(200)       | YES  |     | NULL    |                |
| RelayFailureLocation          | varchar(200)       | YES  |     | NULL    |                |
| RepairCenter                  | varchar(200)       | YES  |MISS | NULL    |                |
| UserID                        | varchar(200)       | YES  |MISS | NULL    |                |
| DateCreated                   | varchar(45)        | YES  |     | NULL    |                |
| LastUpdated                   | varchar(45)        | YES  |     | NULL    |                |
| LastUpdatedBy                 | varchar(45)        | YES  |     | NULL    |                |
| EstimatedRepairCompletionDate | varchar(45)        | YES  |     | NULL    |                |
| StartRepairDate               | varchar(45)        | YES  |     | NULL    |                |
| Attachment                    | longblob           | YES  |     | NULL    |                |
| AttachmentName                | varchar(45)        | YES  |     | NULL    |                |
| AttachmentType                | varchar(45)        | YES  |     | NULL    |                |
| AttachmentSize                | varchar(45)        | YES  |     | NULL    |                |
| PartsReturnProcess            | varchar(45)        | YES  |     | NULL    |                |
| EcoImplemented                | varchar(45)        | YES  |     | NULL    |                |
| CountFrequency                | varchar(45)        | YES  |     | NULL    |                |
| VisualInspectionStatus        | varchar(200)       | YES  |     | NULL    |                |
| VisualInspectionResult        | varchar(200)       | YES  |     | NULL    |                |
| DebugTestingStatus            | varchar(200)       | YES  |     | NULL    |                |
| DebugTestingResult            | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingStatus              | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingResult              | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingErrorCode           | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingActionTaken         | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingComponentLocation   | varchar(200)       | YES  |     | NULL    |                |
| ICTTestingDesignator          | varchar(200)       | YES  |     | NULL    |                |
| FctTestingStatus              | varchar(200)       | YES  |     | NULL    |                |
| FctTestingResult              | varchar(200)       | YES  |     | NULL    |                |
| Status                        | varchar(40)        | YES  |     | NULL    |                |
+-------------------------------+--------------------+------+-----+---------+----------------+

tbuser

+---------------+--------------------+------+-----+---------+----------------+
|     Field     |        Type        | Null | Key | Default |     Extra      |
+---------------+--------------------+------+-----+---------+----------------+
| UserID        | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| Username      | varchar(500)       | YES  |     | NULL    |                |
| Password      | varchar(500)       | YES  |     | NULL    |                |
| Name          | varchar(500)       | YES  |     | NULL    |                |
| EmployeeID    | varchar(500)       | YES  | MUL | NULL    |                |
| Email         | varchar(500)       | YES  |     | NULL    |                |
| StatusID      | "int(10) unsigned" | YES  |     | NULL    |                |
| AuthorityID   | "int(10) unsigned" | YES  |     | NULL    |                |
| CompanyID     | "int(10) unsigned" | YES  |     | NULL    |                |
| LastUpdated   | varchar(50)        | YES  |     | NULL    |                |
| LastUpdatedBy | varchar(45)        | YES  |     | NULL    |                |
| LastLogin     | varchar(45)        | YES  |     | N/A     |                |
+---------------+--------------------+------+-----+---------+----------------+

tbparts

+-----------------+--------------------+------+-----+---------+----------------+
|      Field      |        Type        | Null | Key | Default |     Extra      |
+-----------------+--------------------+------+-----+---------+----------------+
| PartsID         | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| PartsNo         | varchar(20)        | NO   | MUL | NULL    |                |
| PartsDesc       | varchar(100)       | YES  |     | NULL    |                |
| CompanyID       | "int(10) unsigned" | NO   |     | NULL    |                |
| UserID          | "int(10) unsigned" | YES  |     | NULL    |                |
| LastUpdatedTime | varchar(45)        | YES  |     | NULL    |                |
| Category        | varchar(45)        | YES  |     | NULL    |                |
+-----------------+--------------------+------+-----+---------+----------------+

tbcompany

+--------------+--------------------+------+-----+---------+----------------+
|    Field     |        Type        | Null | Key | Default |     Extra      |
+--------------+--------------------+------+-----+---------+----------------+
| CompanyID    | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| Company      | varchar(45)        | NO   | MUL | NULL    |                |
| Alias        | varchar(45)        | YES  |     | NULL    |                |
| SupplierCode | varchar(45)        | NO   |     | NULL    |                |
+--------------+--------------------+------+-----+---------+----------------+

vpartsinfo

+-----------------+--------------------+------+-----+---------+-------+
|      Field      |        Type        | Null | Key | Default | Extra |
+-----------------+--------------------+------+-----+---------+-------+
| PartsID         | "int(10) unsigned" | NO   |MISS | 0       |       |
| PartsNo         | varchar(20)        | NO   |     | NULL    |       |
| PartsDesc       | varchar(100)       | YES  |     | NULL    |       |
| CompanyID       | "int(10) unsigned" | NO   |     | NULL    |       |
| UserID          | "int(10) unsigned" | YES  |     | NULL    |       |
| LastUpdatedTime | varchar(45)        | YES  |     | NULL    |       |
| Company         | varchar(45)        | NO   |     | NULL    |       |
| Name            | varchar(500)       | YES  |     | NULL    |       |
+-----------------+--------------------+------+-----+---------+-------+

tb1stdebug

+-----------------------------+--------------------+------+-----+---------+----------------+
|            Field            |        Type        | Null | Key | Default |     Extra      |
+-----------------------------+--------------------+------+-----+---------+----------------+
| FirstDebugID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                    | varchar(500)       | YES  |MISS | NULL    |                |
| FirstDebugTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| FirstDebugActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| FirstDebugComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+-----------------------------+--------------------+------+-----+---------+----------------+

tb2nddebug

+-----------------------------+--------------------+------+-----+---------+----------------+
|            Field            |        Type        | Null | Key | Default |     Extra      |
+-----------------------------+--------------------+------+-----+---------+----------------+
| SecondDebugID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                     | varchar(500)       | YES  |MISS | NULL    |                |
| SecondDebugTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| SecondDebugActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| SecondDebugComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+-----------------------------+--------------------+------+-----+---------+----------------+

tb3rddebug

+-----------------------------+--------------------+------+-----+---------+----------------+
|            Field            |        Type        | Null | Key | Default |     Extra      |
+-----------------------------+--------------------+------+-----+---------+----------------+
| ThirdDebugID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                    | varchar(500)       | YES  |MISS | NULL    |                |
| ThirdDebugTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| ThirdDebugActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| ThirdDebugComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+-----------------------------+--------------------+------+-----+---------+----------------+

tb1stfct

+---------------------------+--------------------+------+-----+---------+----------------+
|           Field           |        Type        | Null | Key | Default |     Extra      |
+---------------------------+--------------------+------+-----+---------+----------------+
| FirstFctID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                  | varchar(45)        | YES  |MISS | NULL    |                |
| FirstFctTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| FirstFctActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| FirstFctComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+---------------------------+--------------------+------+-----+---------+----------------+

tb2ndfct

+----------------------------+--------------------+------+-----+---------+----------------+
|           Field            |        Type        | Null | Key | Default |     Extra      |
+----------------------------+--------------------+------+-----+---------+----------------+
| SecondFctID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                   | varchar(45)        | YES  |MISS | NULL    |                |
| SecondFctTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| SecondFctActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| SecondFctComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+----------------------------+--------------------+------+-----+---------+----------------+

tb3rdfct

+---------------------------+--------------------+------+-----+---------+----------------+
|           Field           |        Type        | Null | Key | Default |     Extra      |
+---------------------------+--------------------+------+-----+---------+----------------+
| ThirdFctID                | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                  | varchar(45)        | YES  |MISS | NULL    |                |
| ThirdFctTestingErrorCode  | varchar(500)       | YES  | MUL | NULL    |                |
| ThirdFctActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| ThirdFctComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+---------------------------+--------------------+------+-----+---------+----------------+

tbvisual

+-----------------------------------+--------------------+------+-----+---------+----------------+
|               Field               |        Type        | Null | Key | Default |     Extra      |
+-----------------------------------+--------------------+------+-----+---------+----------------+
| VisualID                          | "int(10) unsigned" | NO   | PRI | NULL    | auto_increment |
| RepairID                          | varchar(45)        | YES  |MISS | NULL    |                |
| VisualInspectionErrorCode         | varchar(500)       | YES  | MUL | NULL    |                |
| VisualInspectionActionTaken       | varchar(500)       | YES  |     | NULL    |                |
| VisualInspectionComponentLocation | varchar(500)       | YES  |     | NULL    |                |
+-----------------------------------+--------------------+------+-----+---------+----------------+

作为尝试解决与索引优化无关的多余数据的附带问题:

A) 输出

+----------------------------+-----------------------------+----------------------------+
| FirstDebugTestingErrorCode | SecondDebugTestingErrorCode | ThirdDebugTestingErrorCode |
+----------------------------+-----------------------------+----------------------------+
| T00111                     | T03333                      | T05555                     |
| T00111                     | T03333                      | T06666                     |
| T00111                     | T04444                      | T05555                     |
| T00111                     | T04444                      | T06666                     |
| T02222                     | T03333                      | T05555                     |
| T02222                     | T03333                      | T06666                     |
| T02222                     | T04444                      | T05555                     |
+----------------------------+-----------------------------+----------------------------+

B) 期望的输出

+----------------------------+-----------------------------+----------------------------+
| FirstDebugTestingErrorCode | SecondDebugTestingErrorCode | ThirdDebugTestingErrorCode |
+----------------------------+-----------------------------+----------------------------+
| T00111                     | T04444                      | T06666                     |
| T02222                     | T03333                      | T05555                     |
+----------------------------+-----------------------------+----------------------------+

【讨论】:

  • 添加索引后它变得很快。感谢您的帮助先生!
  • 嗨 Drew,有什么方法可以防止此视图上出现重复数据吗?添加更多数据后,它会在视图上显示大量重复记录。
  • select distinct 那么剩下的呢?
  • 我试过了,它仍然显示相同的数量。假设我在 tb1stdebug 上添加了 2 条引用 RepairID 1 的记录,那么我应该在视图上显示 2 行,其中包含我之前添加的不同 tb1stdebug 数据。有什么办法吗?
  • 你的栏目太多了。您能否 (A) 显示 2 或 3 行作为输出(并非所有列都可能是 5 列),然后 (B) 显示所需的相同输出?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多