php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 24-05-2020, 12:13
long_forum
 Registrierter Benutzer
Links : Onlinestatus : long_forum ist offline
Registriert seit: May 2020
Beiträge: 10
long_forum befindet sich auf einem aufstrebenden Ast
Standard MySQL Abfrage dauert 7 Sekunden

Mahlzeit,

habe einen Fulltext Index auf 3 Spalten anlegt:
Code:
Code:
ALTER TABLE SystemEvents ADD FULLTEXT count_entrys(FromHost, SysLogTag, Message(500));
Aber leider benötigt er 7 Sekunden für die Abfrage bei 2,8 Millionen Einträgen egal welche Abfrage ich verwende:
Code:
Code:
SELECT COUNT(*) FROM SystemEvents WHERE MATCH(FromHost, SysLogTag, Message) AGAINST('192.168.*' IN NATURAL LANGUAGE MODE); 
SELECT COUNT(*) FROM SystemEvents WHERE FromHost like '%' AND SysLogTag like '%' AND Message like '%';
 SELECT COUNT(FromHost) FROM SystemEvents WHERE FromHost like '%' AND SysLogTag like '%' AND Message like '%';



Ziel ist es, möglichst schnell die Anzahl der Einträge ohne und mit Filter zu zählen1
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 24-05-2020, 12:26
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.734
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wozu die unnötigen LIKE?
Mit Zitat antworten
  #3 (permalink)  
Alt 24-05-2020, 13:29
long_forum
 Registrierter Benutzer
Links : Onlinestatus : long_forum ist offline
Registriert seit: May 2020
Beiträge: 10
long_forum befindet sich auf einem aufstrebenden Ast
Standard

Ist aus aus den Anfängen meiner Abfrage. Habe jetzt bloß leider festgestellt, dass die Abfrage zu lange dauert, egal ob mit oder ohne Index.



Bin für jede Lösung dankbar.
Mit Zitat antworten
  #4 (permalink)  
Alt 24-05-2020, 13:48
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.734
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Naja, dein LIKE umgeht die Verwendung von einem Index. Wundert mich nicht, dass das langsam ist.
Mit Zitat antworten
  #5 (permalink)  
Alt 24-05-2020, 13:52
long_forum
 Registrierter Benutzer
Links : Onlinestatus : long_forum ist offline
Registriert seit: May 2020
Beiträge: 10
long_forum befindet sich auf einem aufstrebenden Ast
Standard

Aber müsste nicht der Befehl
Code:
SELECT COUNT(*) FROM SystemEvents WHERE MATCH(FromHost, SysLogTag, Message) AGAINST('192.168.*' IN NATURAL LANGUAGE MODE);
schneller gehen? Er benötigt aber die gleiche Zeit!
Mit Zitat antworten
  #6 (permalink)  
Alt 24-05-2020, 14:18
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.734
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Hast du schon geschaut, was das EXPLAIN sagt?
Mit Zitat antworten
  #7 (permalink)  
Alt 25-05-2020, 16:19
long_forum
 Registrierter Benutzer
Links : Onlinestatus : long_forum ist offline
Registriert seit: May 2020
Beiträge: 10
long_forum befindet sich auf einem aufstrebenden Ast
Standard

Irgendetwas stimmt nicht ... wenn ich ohne Explain Abfrage sind es ca. 230T Einträge. Der Wert stimmt!

Mit Explain:

Code:
EXPLAIN SELECT COUNT(*) FROM SystemEvents WHERE FromHost like '%%' AND SysLogTag like '%testentry%' AND Message like '%%'
+----+-------------+--------------+------------+------+---------------+------+---------+------+---------+----------+-------------+
| id | select_type | table        | partitions | type | possible_keys | key  | key_len | ref  | rows    | filtered | Extra       |
+----+-------------+--------------+------------+------+---------------+------+---------+------+---------+----------+-------------+
|  1 | SIMPLE      | SystemEvents | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 2653309 |     0.14 | Using where |
+----+-------------+--------------+------------+------+---------------+------+---------+------+---------+----------+-------------+
Mit Zitat antworten
  #8 (permalink)  
Alt 25-05-2020, 16:39
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.734
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wie bereits gesagt, mit LIKE verhinderst du die Nutzung eines Index und die Abfrage dauerst wesentlich länger. Warum ist das jetzt immer noch drin?
Mit Zitat antworten
  #9 (permalink)  
Alt 25-05-2020, 16:43
long_forum
 Registrierter Benutzer
Links : Onlinestatus : long_forum ist offline
Registriert seit: May 2020
Beiträge: 10
long_forum befindet sich auf einem aufstrebenden Ast
Standard

Wie schreibe ich es den um bzw. anders? Mit Match bekomme ich auch keine richtige Trefferanzahl bzw. es dauert zu lange?
Mit Zitat antworten
  #10 (permalink)  
Alt 25-05-2020, 18:09
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.734
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Wie schaut das EXPLAIN dazu aus?
Mit Zitat antworten
  #11 (permalink)  
Alt 25-05-2020, 18:13
long_forum
 Registrierter Benutzer
Links : Onlinestatus : long_forum ist offline
Registriert seit: May 2020
Beiträge: 10
long_forum befindet sich auf einem aufstrebenden Ast
Standard

EXPLAIN SELECT COUNT(*) FROM SystemEvents WHERE MATCH(FromHost, SysLogTag, Message) AGAINST('%' IN NATURAL LANGUAGE MODE)"
Code:
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra                        |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
|  1 | SIMPLE      | NULL  | NULL       | NULL | NULL          | NULL | NULL    | NULL | NULL |     NULL | Select tables optimized away |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
Mit Zitat antworten
  #12 (permalink)  
Alt 25-05-2020, 18:35
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.734
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Ein AGAINST auf '%' macht überhaupt keinen Sinn.

Hast du eigentlich irgendeine Ahnung davon, was du da tust? Für mich wirkt das alles zufallsmäßig zusammengewürfelt, ohne sich auch nur irgendwelche Gedanken gemacht oder Doku gelesen zu haben.
Mit Zitat antworten
  #13 (permalink)  
Alt 25-05-2020, 19:26
long_forum
 Registrierter Benutzer
Links : Onlinestatus : long_forum ist offline
Registriert seit: May 2020
Beiträge: 10
long_forum befindet sich auf einem aufstrebenden Ast
Standard

Das ist meine Problem, dass ich die Dokus nicht richtig verstehe bzw. immer weiter aufeinander programmiert habe und es deshalb so zusammengewürfelt ist. Ich hätte wahrscheinlich auch nie Indexe benutzt, wenn ich nicht diese auf das Zeitproblem gestoßen wäre. Dann habe ich auf eine Spalte ein Index gelegt, welcher gut funktioniert hat aber bei der Abfrage von 3 und mehr Spalten eben nicht mehr.



Ich werde gleich mal meine Tabellenstruktur posten sowie was ich abfragen möchte. Also von Anfang an.
Mit Zitat antworten
  #14 (permalink)  
Alt 25-05-2020, 19:56
long_forum
 Registrierter Benutzer
Links : Onlinestatus : long_forum ist offline
Registriert seit: May 2020
Beiträge: 10
long_forum befindet sich auf einem aufstrebenden Ast
Standard

Ich fange mal ganz von vorn an. Die empfangenden Meldungen von rsyslog werden in eine MySQL DB gespeicht. Ziel ist es mittels PHP diese anzeigen zu lassen. Ich erwarte pro Tag ca. 1 Million Meldungen und möchte diese 30 Tage vorhalten - also ca. 30 Millionen Einträge.

Code:
DESCRIBE SystemEvents;
+--------------------+------------------+------+-----+---------+----------------+
| Field              | Type             | Null | Key | Default | Extra          |
+--------------------+------------------+------+-----+---------+----------------+
| ID                 | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| CustomerID         | bigint(20)       | YES  |     | NULL    |                |
| ReceivedAt         | datetime         | YES  |     | NULL    |                |
| DeviceReportedTime | datetime         | YES  | MUL | NULL    |                |
| Facility           | smallint(6)      | YES  |     | NULL    |                |
| Priority           | smallint(6)      | YES  |     | NULL    |                |
| FromHost           | varchar(60)      | YES  | MUL | NULL    |                |
| Message            | text             | YES  | MUL | NULL    |                |
| NTSeverity         | int(11)          | YES  |     | NULL    |                |
| Importance         | int(11)          | YES  |     | NULL    |                |
| EventSource        | varchar(60)      | YES  |     | NULL    |                |
| EventUser          | varchar(60)      | YES  |     | NULL    |                |
| EventCategory      | int(11)          | YES  |     | NULL    |                |
| EventID            | int(11)          | YES  |     | NULL    |                |
| EventBinaryData    | text             | YES  |     | NULL    |                |
| MaxAvailable       | int(11)          | YES  |     | NULL    |                |
| CurrUsage          | int(11)          | YES  |     | NULL    |                |
| MinUsage           | int(11)          | YES  |     | NULL    |                |
| MaxUsage           | int(11)          | YES  |     | NULL    |                |
| InfoUnitID         | int(11)          | YES  |     | NULL    |                |
| SysLogTag          | varchar(60)      | YES  | MUL | NULL    |                |
| EventLogType       | varchar(60)      | YES  |     | NULL    |                |
| GenericFileName    | varchar(60)      | YES  |     | NULL    |                |
| SystemID           | int(11)          | YES  |     | NULL    |                |
+--------------------+------------------+------+-----+---------+----------------+
Was habe ich vor:

1.) Ich würde gerne nach den Einträgen in den Spalten FromHost, SysLogTag filtern mittels DISTINCT
2.) Ich würde gerne alle Einträge zählen, welche bestimmte Werte in den Spalten FromHost, SysLogTag, Message, DeviceReportedTime enthalten - Filter können auch leer sein (also alle vorhanden Einträge zählen)
3.) Ausgabe der ersten 1000 Einträge der gefundenen Ergebnisse


Die Frage lautet jetzt, wie muss ich meine Indexe(oder ein anderes Verfahren) anlegen/umsetzen, damit ich die gewünschten Informationen möglichst schnell erhalte???
Mit Zitat antworten
  #15 (permalink)  
Alt 25-05-2020, 20:24
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.734
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Um zu wissen, wie die Indexe aussehen müssen, muss man erstmal die Abfragen kennen. Also solltet du erstmal eine sinnvolle Beispielabfrage zeigen.

Außerdem solltest du die Tabellenstruktur mit wenigen Beispieldaten als SQL-Code posten, damit man das bei sich selber nachstellen kann.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage in MySQL dauert ewig SKB PHP Developer Forum 7 19-09-2007 20:48
MySQL Abfrage. 136 Abfragen in 20 Sekunden normal? sonnenfänger SQL / Datenbanken 26 30-06-2005 18:46
abfrage dauert relativ lange snake4ever SQL / Datenbanken 11 03-05-2004 14:36
Abfrage dauert über eine Minute otto-mueller SQL / Datenbanken 3 18-03-2004 12:31
Sekunden in Minuten und Sekunden umrechnen skalu PHP Developer Forum 11 26-08-2003 20:39

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

09.10.2020 palle_1977 | Kategorie: PHP
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
Erotik-Portal

Mit unsererem Erotik-Portal erhalten Sie ein komplettes Internetprojekt inklusive einer bedienerfreundlichem Administration sowie zahlreichen wichtigen Funktionen. Unser auf PHP und MySQL basierendes Script bietet Ihnen - und Ihren Besuchern - komfort

18.06.2020 ISD-Genthin | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:56 Uhr.