0

約 1800 件のレコード (多くはない) を返すクエリがありますが、実行に時間がかかります (10 秒) が、その理由がわかりません。これは長い時間がかかる私のクエリです:

SELECT tb_KonzeptFunktionen.Konzept AS KonzeptID, tb_KonzeptFunktionen.Funktion,
    tb_KonzeptFunktionen.Version, 
    qryFunktionen_Übersicht.ID,
    qryFunktionen_Übersicht.Fehlerpfad_Kommentar AS Kommentar, 
    qryFunktionen_Übersicht.Fehlerpfadname, 
    qryFunktionen_Übersicht.Fehlerpfad_CDT, 
    qryFunktionen_Übersicht.Fehlerpfad_Kommentar, 
    qryFunktionen_Übersicht.symptombasiert, 
    qryFunktionen_Übersicht.Beschreibung_vorhanden, 
    qryFunktionen_Übersicht.Max_Pfad, 
    qryFunktionen_Übersicht.Max_Info, 
    qryFunktionen_Übersicht.Max_Status, 
    qryFunktionen_Übersicht.Max_Strategie, 
    qryFunktionen_Übersicht.Max_Prüfplan, 
    qryFunktionen_Übersicht.Min_Pfad, 
    qryFunktionen_Übersicht.Min_Info, 
    qryFunktionen_Übersicht.Min_Status, 
    qryFunktionen_Übersicht.Min_Strategie, 
    qryFunktionen_Übersicht.Min_Prüfplan, 
    qryFunktionen_Übersicht.Sig_Pfad, 
    qryFunktionen_Übersicht.Sig_Info, 
    qryFunktionen_Übersicht.Sig_Status,
    qryFunktionen_Übersicht.Sig_Strategie, 
    qryFunktionen_Übersicht.Sig_Prüfplan, 
    qryFunktionen_Übersicht.Plaus_Pfad, 
    qryFunktionen_Übersicht.Plaus_Info, 
    qryFunktionen_Übersicht.Plaus_Status, 
    qryFunktionen_Übersicht.Plaus_Strategie, 
    qryFunktionen_Übersicht.Plaus_Prüfplan, 
    qryFunktionen_Übersicht.Beschreibung_allgemein, 
    qryFunktionen_Übersicht.Funktionsname        
FROM tb_KonzeptFunktionen RIGHT JOIN qryFunktionen_Übersicht 
    ON tb_KonzeptFunktionen.Funktion = qryFunktionen_Übersicht.Funktionsname
WHERE (((tb_KonzeptFunktionen.Konzept)=[Formulare]![frm_Fahrzeug]![ID]))

これは、上記のクエリに関連する別のクエリです。

SELECT tbFunktionen_Übersicht.*, 
    tbFunktionen.Funktionsname, 
    tbFunktionen.Funktionsbeschreibung, 
    tbFunktionen.diagnoserelevant, 
    tbFunktionen.ID AS FunktionsID
FROM tbFunktionen_Übersicht INNER JOIN tbFunktionen 
    ON tbFunktionen_Übersicht.Funktion = tbFunktionen.ID
ORDER BY tbFunktionen.Funktionsname, tbFunktionen_Übersicht.Fehlerpfadname;

ORDERまたはJOINSに表示されるフィールドにインデックスを追加しましたが、効果がありません。


この投稿を参照してください。答えを見つけることができます。

4

1 に答える 1

0

私にとって、PDO は SQL クエリの改善をもたらしました: http://www.php.net/manual/en/intro.pdo.php

    //SQL-HANDLING*******************************************************//
//*********************************************************************//
//General Example-----------------
//$sqlHandling = new sqlHandling;
//$sqlHandling->connectSQL($sqlArray['host'], $sqlArray['user'],$sqlArray['pass'], $sqlArray['dbName']);
    //$tableNameArray = $sqlHandling->showTablesSQL($sqlHandling->dbh);
class sqlHandling{

    //PDO - Object/ callItOutside with: $sqlClass->dbh
    public $dbh = null;

//connectDataBase-------------------//
    //-----------------
    //example: $dbh = connectSQL('localhost','admin','1admin','test');
    //start transaction
    //$dbh->beginTransaction();
    //-----------------
    //end transaction
    //$dbh->commit();
    //$dbh = null;
    //-----------------
    //1:SQL-Location
    function connectSQL($host, $user, $pass, $dbname){
        //endPrevTransaction
        if($this->dbh != null){
            $this->dbh->commit();
            $this->dbh = null;
        }
        //establish connection
        try{
            $this->dbh = new PDO('mysql:host='.$host.';dbname='.$dbname, $user, $pass);
            $this->dbh->exec('SET CHARACTER SET utf8');
            return $this->dbh;
        }catch(PDOException $e){
            print 'Error!: ' . $e->getMessage() . '<br/>';
            die();
            return FALSE;
        }
    }
//createColumnSQL-------------------//
    //example: createColumnSQL($dbh, 'backupexample', array('SomeName1 VARCHAR(30)', 'SomeName2 VARCHAR(30)', 'SomeName3 VARCHAR(30)', 'SomeName4 VARCHAR(30)'));
    //1:PDO connection/2:table/3:array holding columns
    function createColumnSQL($dbh, $table, $columns){
        //cicle through each array
        foreach($columns as $tempColumn){
            //set query
            $query = 'ALTER TABLE `'.$table.'` ADD COLUMN '.$tempColumn;
            //send the query
            $stmt = $dbh->prepare($query);
            //send the data
            $stmt->execute();
        }
    }
}

これは、私の PDO sqlHandling クラスの実例にすぎません。retrieveAllValues がこれ以上役に立たないことはわかっていますが、このコードを採用してもかまいません。

製造業

于 2012-05-23T08:31:57.113 に答える