Announcement

Collapse
No announcement yet.

Performance Join

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Performance Join

    Hallo zusammen,

    Ich habe 4 Tabellen und die will ich gerne joinen.
    Ich habe das mit einer einfachen select join Query gemacht, aber das dauert leider 4-5 sek ..

    Die View wird dann in einem PHP Skript benutzt .. (Daten werden von da rausgeholt)

    Jetzt meine Frage : Wie kann ich mein Join verbessern?

    1st Table (14.000 rows) :

    Code:
    CREATE TABLE `gatch` ( 
    `gatchID` INT(11) NOT NULL AUTO_INCREMENT, 
    `OS` VARCHAR(24) NOT NULL DEFAULT '', 
    `Start` DATETIME NULL DEFAULT '0000-00-00 00:00:00', 
    `End` DATETIME NULL DEFAULT NULL, 
    PRIMARY KEY (`gatchID`) 
    ) 
    COLLATE='latin1_swedish_ci' 
    ENGINE=InnoDB 
    ROW_FORMAT=DEFAULT

    2nd Table (250 rows):

    Code:
    CREATE TABLE `gox` ( 
    `goxID` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `SN` VARCHAR(15) NOT NULL, 
    PRIMARY KEY (`goxID`) 
    ) 
    COLLATE='latin1_swedish_ci' 
    ENGINE=InnoDB 
    ROW_FORMAT=DEFAULT

    3rd Table (100.000 rows) :

    Code:
    CREATE TABLE `gest` ( 
    `gestID` INT(11) NOT NULL AUTO_INCREMENT, 
    `gatchID` INT(11) NOT NULL, 
    PRIMARY KEY (`gestID`), 
    INDEX `Index 2` (`gatchID`) 
    ) 
    COLLATE='latin1_swedish_ci' 
    ENGINE=InnoDB 
    ROW_FORMAT=DEFAULT

    4th Table (120.000) :

    Code:
    CREATE TABLE `gestseriesbox` ( 
    `ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 
    `goxID` INT(10) UNSIGNED NOT NULL, 
    `gestID` INT(10) UNSIGNED NOT NULL, 
    PRIMARY KEY (`ID`), 
    INDEX `Box` (`goxID`), 
    INDEX `Test` (`gestID`) 
    ) 
    COLLATE='latin1_swedish_ci' 
    ENGINE=InnoDB 
    ROW_FORMAT=DEFAULT



    SELECT (view) Query :

    Code:
    CREATE VIEW `myView` AS 
    select `gatch`.`gatchID` AS `gatchID`, 
    `gest`.`gestID` AS `gestID`, 
    `gestseriesbox`.`ID` AS `GoxSeqID`, 
    `gestseriesbox`.`goxID` AS `goxID`, 
    `gox`.`SN` AS `SN`, 
    from (`gatch` join ((`gest` join `gestseriesbox`) join `gox`)) 
    where ((`gatch`.`gatchID` = `gest`.`gatchID`) 
    and (`gox`.`goxID` = `gestseriesbox`.`goxID`) 
    and (`gest`.`gestID` = `gestseriesbox`.`gestID`)) 
    order by `gatch`.`gatchID` desc,`gest`.`gestID` desc;

    SELECT version() : 5.1.30


    Wie kann ich jetzt die Performance von meinem Join verbessern ? Mehrere Views und jedes mal 2 Tabellen joinen ? LIMIT benutzen ?

    Danke im voraus.

  • #2
    Originally posted by seriall View Post
    Wie kann ich jetzt die Performance von meinem Join verbessern?
    Hallo seriall,
    Tabellen sollten immer per "JOIN... ON..." und nicht per WHERE verbunden werden.

    PHP Code:
    CREATE VIEW `myView` AS 
    select `gatch`.`gatchID` AS `gatchID`, 
    `
    gest`.`gestID` AS `gestID`, 
    `
    gestseriesbox`.`ID` AS `GoxSeqID`, 
    `
    gestseriesbox`.`goxID` AS `goxID`, 
    `
    gox`.`SN` AS `SN`, 
    from `gatch
    INNER JOIN `gest
            
    ON `gatch`.`gatchID` = `gest`.`gatchID`
    INNER JOIN `gestseriesbox`
            
    ON `gest`.`gestID` = `gestseriesbox`.`gestID`
    INNER JOIN `gox`
            
    ON `gox`.`goxID` = `gestseriesbox`.`goxID`
    order by `gatch`.`gatchIDdesc,`gest`.`gestIDdesc
    Und Falk Prüfer sprach: Formatierung von SQL in Beiträgen

    Comment

    Working...
    X