SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 12.08.2016, 14:45:32
Fake Fake ist offline
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)
Mit Zitat antworten
  #2  
Alt 12.08.2016, 14:48:32
Benutzerbild von vt1816
vt1816 vt1816 ist offline
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!
Mit Zitat antworten
  #3  
Alt 12.08.2016, 15:06:55
chorn chorn ist offline
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
Mit Zitat antworten
  #4  
Alt 12.08.2016, 15:19:04
Fake Fake ist offline
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)
Mit Zitat antworten
  #5  
Alt 12.08.2016, 16:25:38
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: DB Abfragen beschleunigen

Zitat:
Zitat von Fake Beitrag anzeigen
[..]
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!
Mit Zitat antworten
  #6  
Alt 12.08.2016, 16:35:45
Fake Fake ist offline
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);
Mit Zitat antworten
  #7  
Alt 12.08.2016, 17:09:11
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: DB Abfragen beschleunigen

Code:
EXPLAIN UPDATE ...
?
__________________
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!
Mit Zitat antworten
  #8  
Alt 12.08.2016, 17:30:48
Fake Fake ist offline
Anfänger
 
Registriert seit: May 2016
Alter: 30
Beiträge: 33
AW: DB Abfragen beschleunigen

Spuckt sein 15min nichts aus.
Mit Zitat antworten
  #9  
Alt 13.08.2016, 19:58:40
Fake Fake ist offline
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)
Mit Zitat antworten
  #10  
Alt 14.08.2016, 18:49:08
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: DB Abfragen beschleunigen

Code:
EXPLAIN SELECT * FROM
war nicht gefragt, sondern
Code:
EXPLAIN UPDATE ...
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!
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySQL-Abfrage, Verknüpfung zweier Abfragen Muffelon MySQLi/PDO/(MySQL) 1 05.10.2014 09:16:35
MsSQL-Abfrage, Abfragen ob Daten gefunden Georgee MySQLi/PDO/(MySQL) 2 29.06.2011 19:45:14
[MySQL] IF / CASE: mehrere Werte abfragen Zeussi MySQLi/PDO/(MySQL) 2 01.08.2009 16:44:53
Wie SELECT mit Suche nach String beschleunigen? mgutt MySQLi/PDO/(MySQL) 11 23.10.2008 18:36:17
Mehrere Abfragen marqito MySQLi/PDO/(MySQL) 5 22.04.2007 00:23:33


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:16:28 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt