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
  #2 (permalink)  
Alt 24-05-2020, 12:26
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.787
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.787
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.787
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.787
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.787
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.787
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.787
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

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni

Arbeitsmanagement-Tools
Arbeitsmanagement-ToolsWarum jedes Team Arbeitsmanagement-Tools benötigt. Man schätzt, dass 25% eines durchschnittlichen Mitarbeiter-Tages durch ineffiziente Arbeit vergeudet werden.

11.12.2020 | Berni


 

Aktuelle PHP Scripte

PHP Newsletter Script SuperWebMailer ansehen PHP Newsletter Script SuperWebMailer

Die webbasierte PHP Newsletter Software SuperWebMailer ist die optimale Lösung zur Durchführung eines erfolgreichen E-Mail-Marketings. Zur Nutzung des PHP Script-Pakets ist eine eigene Webpräsenz/Server mit PHP 5 oder neuer, MySQL 4 oder neuer und die

29.04.2021 mirko_swm | Kategorie: PHP/ Mail
OXID eShop

Mit OXID eshop bieten wir Ihnen eine modulare und skalierbare Internet Shopping Software mit einem hervorragenden Preis-/Leistungsverhältnis.

29.04.2021 eric.jankowfsky@ | Kategorie: PHP/ Shops
PHP-Login

Die Aufgabenstellung bestand darin, ein einfaches Login-Script zu erstellen, dass schnell und universell auf jeder Webseiten eingebaut werden kann. Der Schwerpunkt lag dabei auf der Entwicklung eines universell einsetzbarem Modul für den Login und zur

05.04.2021 Wallhalla | Kategorie: PHP/ Kundenverwaltung
 Alle PHP Scripte anzeigen

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