CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
12.08.2016, 14:45:32
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
DB Abfragen beschleunigen
Hallöchen!
Aktuell habe ich immer noch ~600,000 Datensätze die eine
bestimmte (verschlüsselte ID) haben, die sich nicht umwandeln
lässt.
Aus diesem Grund musste ich eine weitere Tabelle mit 500,000,000
Datensätzen schaffen, die die originale ID enthält und die verschlüsselte.
Nun das Problem...
600,000 verschlüsselte IDs suchen sich nicht mal eben so schnell aus
jeweils 500,000,000 möglichen. Ich suche also einen Weg das ganze zu
beschleunigen, soweit es möglich ist.
Verbesserungswürdig ist sicher mein primitiver Code aber womöglich
auch andere Dinge, die ihr mir aus Erfahrungswerten raten könnt.
PHP-Code:
$result = ht_Query("SELECT guid, uid FROM htweb.players2");
if($result !== false)
{
if(!ht_emptyTable($result))
{
while($row = mysqli_fetch_assoc($result))
{
if(strlen($row['guid']) == 32 && strlen($row['uid']) == 0)
{
$result_global = ht_Query("SELECT u_id FROM htweb.global WHERE guid LIKE '" . $row['guid'] . "' LIMIT 1");
if($result_global !== false)
{
$global = mysqli_fetch_assoc($result_global);
ht_Query("UPDATE htweb.players2 SET uid = '" . $global['u_id'] . "' WHERE guid LIKE '" . $row['guid'] . "' LIMIT 1");
}
}
}
}
}
Ich bin mir ziemlich sicher, dass der Server selbst mehr zulässt.
Auch dazu folgende Werte:
Code:
Intel® Core™ i7-6700 Quad-Core Skylake
32 GB DDR4 RAM
SATA 6 Gb/s SSDs
Leistungsbezogen könnte ich mir deutlich schnellere Ergebnisse vorstellen.
Schon alleine der SSD halber...
Was kann ich hier alles optimieren?
(das übersteigt klar meine Erfahrungswerte - es geht um ein privates Projekt)
|
12.08.2016, 14:48:32
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: DB Abfragen beschleunigen
(Komplette) Tabellenstruktur(en)?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
12.08.2016, 15:06:55
|
Junior Member
|
|
Registriert seit: Apr 2016
Alter: 44
Beiträge: 171
|
|
AW: DB Abfragen beschleunigen
Indexe, Joins, Postgres. Das sieht aber erstmal aus, als wenn die Datenbank das auch intern selber kann, ich seh da keine Notwendigkeit für ein PHP-Skript und schon garnicht für die Millionen Selects die da laufen. Stichwort: Update Join
|
12.08.2016, 15:19:04
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
In Ordnung.
Folge Informationen...
PHP-Code:
"UPDATE htweb_players.players3 AS ply SET ply.uid = ( SELECT glb.uid FROM htweb_players.global AS glb WHERE ply.guid = glb.guid LIMIT 1 )"
Erstmal habe ich den primitiven Query geändert.
Das läuft bereits deutlich schneller, aber ich wills noch viel schneller... :D
Datenbankaufbau:
Code:
htweb_players
+ global
- uid (primary)
- guid
+ players3
- guid (primary)
- uid (null)
"uid" varchar(17)
"guid" varchar(32)
|
12.08.2016, 16:25:38
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: DB Abfragen beschleunigen
Zitat:
Zitat von Fake
[..]
Datenbankaufbau:
Code:
htweb_players
+ global
- uid (primary)
- guid
+ players3
- guid (primary)
- uid (null)
|
Hätte mir eher so etwas vorgestellt inkl. Testdaten:
Code:
-- Exportiere Struktur von Tabelle personen
CREATE TABLE IF NOT EXISTS `personen` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`country` char(2) DEFAULT NULL,
`beruf_id` tinyint(4) DEFAULT NULL,
`bekanntheit` int(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `country` (`country`),
KEY `beruf_id` (`beruf_id`),
KEY `bekanntheit` (`bekanntheit`)
) ENGINE=MyISAM AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;
-- Exportiere Daten aus Tabelle personen: 1 rows
/*!40000 ALTER TABLE `personen` DISABLE KEYS */;
INSERT INTO `personen` (`id`, `name`, `country`, `beruf_id`, `bekanntheit`) VALUES
(1, 'John', 'DE', 1, 25),
(2, 'John', 'DE', 1, 25)
Um bei Performancefragen richtig helfen zu können, bedarf es folgender Informationen (für alle beteiligten Tabellen):
* SHOW CREATE TABLE tbl; -- liefert engine, indexes
* EXPLAIN UPDATE ...; -- EXPLAIN Ausgabe für den Zugriffpfad
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
12.08.2016, 16:35:45
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
AW: DB Abfragen beschleunigen
global
Code:
CREATE TABLE IF NOT EXISTS `global` (
`uid` varchar(17) NOT NULL,
`guid` varchar(32) NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `global` (`uid`, `guid`) VALUES
('26561197960265029', '74ae012b5407e0a3cc2cd82ec1f8ba7d'),
('26561197960265030', '0cc99e3ab77a8a2037d278816f3c9ca7'),
('26561197960265031', 'ca5c318be11f0ee4390bb39ca77ab0f9'),
('26561197960265032', '2fa56708d8aada2196fb7fd179bce65a'),
('26561197960265033', '50b85daac187b3c8fcd709e707446285');
players
Code:
CREATE TABLE IF NOT EXISTS `players_test` (
`guid` varchar(32) NOT NULL,
`uid` varchar(17) DEFAULT NULL,
`ips` text,
`names` text,
`servers` text,
`first_seen` int(11) DEFAULT NULL,
`last_seen` int(11) DEFAULT NULL,
PRIMARY KEY (`guid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `players_test` (`guid`, `uid`, `ips`, `names`, `servers`, `first_seen`, `last_seen`) VALUES
('9448b4dfa9ec30fe3c08e123e45386e7', NULL, '***', '***', NULL, NULL, 1420334359),
('9b6ac87c0449a9dfcd55388fde74429e', NULL, '***', '***', NULL, 1411138866, 1411138866),
('e7b7d8c8018a9e5556e565739be219d2', NULL, '***', '***', NULL, 1410511227, 1410511227),
('4c3b670ca1edfd273a9e4ea18a100258', NULL, '***', '***', NULL, 1416534025, 1416534025),
('9a8830afde6bc5469f447ee28097760f', NULL, '***', '***', NULL, 1437806640, 1437806640);
|
12.08.2016, 17:09:11
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: DB Abfragen beschleunigen
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
12.08.2016, 17:30:48
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
AW: DB Abfragen beschleunigen
Spuckt sein 15min nichts aus.
|
13.08.2016, 19:58:40
|
Anfänger
|
|
Registriert seit: May 2016
Alter: 30
Beiträge: 33
|
|
AW: DB Abfragen beschleunigen
EXPLAIN liefert:
------------------
Code:
Die aktuelle Markierung enthält keine eindeutige („unique“) Spalte. Gitter-Bearbeitungsfunktion, Kontrollkästchen, Bearbeiten, Kopieren und Löschen von Links sind nicht verfügbar. Dokumentation
EXPLAIN SELECT * FROM `global` WHERE guid LIKE '59e512087f66e095f33505edf99d01d1'
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE global NULL ALL NULL NULL NULL NULL 500000001 11.11 Using where
Wie und in welcher Form, kann ich denn nun etwas optimieren?
Bis jetzt dauert allen immer noch EWWWWWWWWWWWWWWWWIG.
Grob überschlagen, dürfte MySQL in 125 Tagen fertig sein :/
Geändert von Fake (13.08.2016 um 20:11:18 Uhr)
|
14.08.2016, 18:49:08
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: DB Abfragen beschleunigen
Code:
EXPLAIN SELECT * FROM
war nicht gefragt, sondern
Mit welcher Version von MySQL arbeitest Du?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 12:16:28 Uhr.
|