2009-04-01 8 views
0

Ich versuche, unsere mySQL Datenbank schneller laufen und ich habe analysiert unsere Log für langsame Abfragen und die häufigste langsame Abfrage ist dies zu machen:„Kann nicht auf eine SELECT-Anweisung konvertieren“ Was das bedeutet

CREATE TABLE IF NOT EXISTS `wp_bad_behavior` (
    `id` INT(11) NOT NULL auto_increment, 
    `ip` TEXT NOT NULL, 
    `date` DATETIME NOT NULL default '0000-00-00 00:00:00', 
    `request_method` TEXT NOT NULL, 
    `request_uri` TEXT NOT NULL, 
    `server_protocol` TEXT NOT NULL, 
    `http_headers` TEXT NOT NULL, 
    `user_agent` TEXT NOT NULL, 
    `request_entity` TEXT NOT NULL, 
    `key` TEXT NOT NULL, 
    INDEX (`ip`(15)), 
    INDEX (`user_agent`(10)), 
    PRIMARY KEY (`id`)); 

Ich versuche zu verstehen, warum diese Abfrage aufgerufen wird, weil nach dem Setup der Tabelle nicht weiter passieren soll.

Das EXPLAIN-Ergebnis dafür lautet: Kann nicht in eine SELECT-Anweisung konvertiert werden.

Irgendwelche Ideen dazu wären fantastisch!

Paul

Antwort

1

EXPLAIN wird nur auf SELECT-Abfragen arbeiten, deshalb beschwert es sich. Warum sich die Abfrage im langsamen Abfrageprotokoll befindet: Entweder wird sie gelöscht und neu erstellt - überprüfen Sie das normale Abfrageprotokoll auf DROP TABLE - oder sie blockiert einfach, weil die Tabelle/Datenbank ausgelastet ist - überprüfen Sie zuerst die anderen langsamen Abfragen, insbesondere diejenigen auf dem gleichen Tisch.

0

Natürlich können Sie eine Erklärung zu einer SELECT Anweisung CREATE nicht umwandeln kann ...

Die Frage ist also, warum eine Schöpfung Aussage so häufig genannt wird. Es verwendet mysqls IF NOT EXISTS, so dass es nicht einmal ein Design-Problem ist, die Tabelle würde nur einmal erstellt werden, obwohl die Abfrage bazillion-mal aufgerufen wird. Vielleicht gibt Ihr System, das die Datenbank verwendet, diese Anweisung von jeder einzelnen Methode aus, um sicherzustellen, dass die tatsächliche Datenbankstruktur ihren Erwartungen entspricht. Nur ein Idiot, wenn jemand diese super wichtige Tabelle löscht.

0

Es ist wahrscheinlich dort als eine einfache Möglichkeit, von jemandem wiederherzustellen, der die Tabelle löscht. Ein guter Grund, warum jemand die Tabelle löschen würde, ist, dass es eine einfache Möglichkeit ist, alte Protokolldateien loszuwerden. Dies wirkt sich jedoch offensichtlich auf die Leistung aus. Daher sollten Sie prüfen, ob kein Code die Tabelle löscht, und diese Prüfung dann entfernen. Dann müssen Sie die Tabelle beim Löschen alter Protokolle manuell neu erstellen.