sql >> Database >  >> RDS >> Mysql

Reduceer MySQL-query's tot één query om te versnellen

Kijk of ik momenteel verkeer vastleg met het algemene logboek:

SELECT @@general_log;   -- 1 if capturing, 0 if not
-- for me, a 1. This means I have been capturing (good for development. Poor idea for Production)

SELECT @@general_log_file; -- file name for General Log if capturing.
-- for me: GeneralLogBegin_20160803_1420.log

SELECT @@datadir; -- the location of the general_log, and other logs
-- for me: C:\ProgramData\MySQL\MySQL Server 5.6\Data\

Nu zet ik het vastleggen van het algemene logboek hieronder uit, omdat de mijne bezig was met vastleggen:

SET GLOBAL general_log=0; -- stop logging

Ik VERPLAATS mijn logbestand naar een back-upmap en hernoem het naar GL_from_20160803_1420_to_20160806_1559

Er is weinig onduidelijkheid over de inhoud en het datum/tijdbereik van de opname die het bovenstaande bestand belichaamt.

Stel de nieuwe naam in voor het vastleggen van het logbestand (Begin segment voor bestandsnaam)

SET GLOBAL general_log_file='GeneralLogBegin_20160806_1559.log';
SET GLOBAL general_log=1; -- Start logging again

Voer een app van mij uit die verbinding maakt met de server, en General Log bevat:

ChunkA:

160806 16:08:37   170 Connect   [email protected] on stackoverflow
          170 Query SHOW VARIABLES
          170 Query SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP())
          170 Query SHOW COLLATION
          170 Query SET NAMES latin1
          170 Query SET character_set_results=NULL
          170 Init DB   my_db_name

Opmerking:mogelijk moet u

mysqladmin -u root -p flush-log

(wachtwoord gevraagd) om de logs uit de cache naar het bestand te spoelen. Trouwens, Sublime Text is geweldig voor het automatisch vernieuwen van een tekstbestand dat momenteel is geladen. Zoals een logbestand.

Dus mijn ChunkA hierboven is de verbindingsstub van een nieuwe verbinding die binnenkomt. Het wordt aangestuurd door de commando's van het programma dat in gebruik is, wat dat ook mag zijn. Het is voorafgaand aan uw programmacommando's die u gewend bent en codeert. Als je voortdurend nieuwe verbindingen maakt, code uitvoert die je schrijft en de verbinding verbreekt, dan maken deze allemaal deel uit van de bagage. Je hebt geen controle over het optimaliseren ervan op een eenvoudige manier.

Wat u moet overwegen te doen, is het General Query-logboek in een productieomgeving UIT te schakelen. En alleen inschakelen tijdens de instellingen voor de foutopsporing en testomgeving. Als u het aan heeft, wordt uw stapel onnodig belast.



  1. SQL-fout ORA 01427

  2. Redenen om GROUP_CONCAT niet te gebruiken?

  3. Extraheer het jaar van een datum in PostgreSQL

  4. Java:ResultSet getString() verschilt tussen omgevingen