0

私はしばらく MySQL を使用してきましたが、現在、実行に 60 秒かかるサブクエリに問題があります。:(「少し遅い」ように見えるので、これを変更する必要があります。また、私はSQLの専門家ではないので、これを行うためのよりスマートな方法があるかどうかを尋ねると思います。これが現在のクエリです:

SELECT VAR_ID, VAR_REF, DET_VAR_NOMB, DET_VAR_IMG, DET_VAR_MEDIDA, DET_VAR_DETALLE, SEN_FECH, SEN_VALOR
FROM variable, detalle_variable, senal
WHERE equipo_EQO_ID =6
AND detalle_variable_DET_VAR_ID = DET_VAR_ID
AND variable_VAR_ID = VAR_ID
AND SEN_ID
IN (
    SELECT MAX( SEN_ID ) 
    FROM senal
    GROUP BY variable_VAR_ID
)

クエリの結果は次のとおりです(選択したいのはそれだけです)

VAR_ID VAR_REF DET_VAR_NOMB DET_VAR_IMG DET_VAR_MEDIDA DET_VAR_DETALLE SEN_FECH SEN_VALOR

8 101 vsth ../../img/foto/variable/play_blue.png 何か何か 2012-05-30 03:14:17 16

テーブルは次のようになります。

-- -----------------------------------------------------
-- Table `pgssgc_stap2`.`detalle_variable`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `pgssgc_stap2`.`detalle_variable` ;

CREATE  TABLE IF NOT EXISTS `pgssgc_stap2`.`detalle_variable` (
  `DET_VAR_ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
  `DET_VAR_NOMB` VARCHAR(45) NOT NULL ,
  `DET_VAR_MEDIDA` VARCHAR(45) NULL DEFAULT NULL ,
  `DET_VAR_DETALLE` VARCHAR(255) NULL DEFAULT NULL ,
  `DET_VAR_IMG` VARCHAR(255) NULL DEFAULT NULL ,
  PRIMARY KEY (`DET_VAR_ID`) )
ENGINE = InnoDB
AUTO_INCREMENT = 101
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;



-- -----------------------------------------------------
-- Table `pgssgc_stap2`.`variable`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `pgssgc_stap2`.`variable` ;

CREATE  TABLE IF NOT EXISTS `pgssgc_stap2`.`variable` (
  `VAR_ID` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
  `VAR_REF` VARCHAR(45) NOT NULL ,
  `detalle_variable_DET_VAR_ID` INT(10) UNSIGNED NOT NULL ,
  `equipo_EQO_ID` INT(10) UNSIGNED NOT NULL ,
  PRIMARY KEY (`VAR_ID`) ,
  INDEX `fk_variable_detalle_variable1` (`detalle_variable_DET_VAR_ID` ASC) ,
  INDEX `fk_variable_equipo1` (`equipo_EQO_ID` ASC) ,
  CONSTRAINT `fk_variable_detalle_variable1`
    FOREIGN KEY (`detalle_variable_DET_VAR_ID` )
    REFERENCES `pgssgc_stap2`.`detalle_variable` (`DET_VAR_ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_variable_equipo1`
    FOREIGN KEY (`equipo_EQO_ID` )
    REFERENCES `pgssgc_stap2`.`equipo` (`EQO_ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
AUTO_INCREMENT = 11
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;


-- -----------------------------------------------------
-- Table `pgssgc_stap2`.`senal`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `pgssgc_stap2`.`senal` ;

CREATE  TABLE IF NOT EXISTS `pgssgc_stap2`.`senal` (
  `SEN_ID` INT(11) NOT NULL AUTO_INCREMENT ,
  `variable_VAR_ID` INT(10) UNSIGNED NOT NULL ,
  `SEN_FECH` DATETIME NULL DEFAULT NULL ,
  `SEN_VALOR` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`SEN_ID`) ,
  INDEX `fk_senal_variable1` (`variable_VAR_ID` ASC) ,
  CONSTRAINT `fk_senal_variable1`
    FOREIGN KEY (`variable_VAR_ID` )
    REFERENCES `pgssgc_stap2`.`variable` (`VAR_ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
AUTO_INCREMENT = 2086
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci;

お返事ありがとうございます。

4

1 に答える 1

0

サブクエリの突き出しに問題があると仮定します。

variable_VAR_IDテーブルの列が でsenalあることを確認してくださいINDEXED

于 2012-05-30T21:15:19.693 に答える