php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.11.2011, 09:07  
Neuer Benutzer
 
Registriert seit: 17.11.2011
Beiträge: 4
PHP-Kenntnisse:
Anfänger
sammler2k befindet sich auf einem aufstrebenden Ast
Standard Performanz: Table vs Temp.Table Query

Guten Morgen,


Ich verstehe folgende Sachlage nicht, für mich ist es derzeit nicht logisch. Vielleicht kann mir jemand erklären warum es so ist, damit ich es verstehe.

Ich habe eine Mysql Datenbank mit zwei Tabellen.

Tab1 mit Namen, Anschrift usw (personenbezogene Daten), Ma_ID (2500 Datensätze)
Tab2 mit Schichten (Dienstplanung) + Ma_ID (derzeit nur 12000 Datensätze)

Nun denkbar einfach zu gucken ob ein MA schon eine Schicht für einen bestimmten Tag hat. Gibt 3 Möglichkeiten -> NOT EXISTS, NOT IN oder nen LEFT JOIN

Ziel des Querys soll es nachher sein, mir alle MA’s aufzulisten die nicht an dem Tag arbeiten müssen und somit für eine Einteilung noch in Frage kommen.

Das Problem ist nicht das Query zu schrieben sondern jede der 3 Möglichkeiten benötigt zuviel Zeit – mehr als 10sec ?!

Schreibe ich aber nun kurzerhand alle Daten in eine Temp.Table und führe hier eins der Querys durch 0.01xx sec -> wie kann das sein ?

Woher kommt diese enorme Zeitdiferenz ? Ich verstehe nicht warum Mysql die „Aufgabe mit den TempTables schneller bewerkstelligt bekommt obwohl es mehr zu tun hat“ ?

Jemand eine idee ?

Query für Temptable könnten Rechtschreibfehler drin sein, denn aus dem Kopfgeschrieben und ja SELECT * macht man nicht i know
Code:
CREATE TEMPORARY TABLE d_ma
SeLECT Nachname, Vorname, Personalnummer, MitarbeiterID FROM c_mitarbeiter
WHERE (c_mitarbeiter.Entlassungsdatum IS NULL OR _mitarbeiter.Entlassungsdatum > NOW());

CREATE TEMPORARY TABLE temp_day
SELETCT * FROM c_pdiplanas WHERE full_date=’xxxx-xx-xx’;

SELECT * FROM d_ma
WHERE NOT EXISTS(SELECT * FROM temp_day WHERE temp_day. ma.MitarbeiterID = da_ma.MitarbeiterID) ORDER BY da_ma.Nachname;
sammler2k ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.11.2011, 09:15  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Was sagt denn EXPLAIN zu deinen Queries?
fab ist offline   Mit Zitat antworten
Alt 30.11.2011, 09:43  
Neuer Benutzer
 
Registriert seit: 17.11.2011
Beiträge: 4
PHP-Kenntnisse:
Anfänger
sammler2k befindet sich auf einem aufstrebenden Ast
Standard

1. Die Version ohne TempTables

id = 1
select_type = PRIMARY
table = c_mitarbeiter
type = range
possible_keys = NULL
key = Primary
key_len = 4
ref = NULL
rows = 1992
Extra = Using where; Using index for groub-by

id = 2
select_type = DEPENDENT SUBQUERY
table = c_pdiplanas
type = ALL
Pos_key = NULL
key = NULL
Key_len = NULL
ref = NULL
rows = 12111
Extra = Using where; Using temporary

2. mit TempTables

Id = 1
Sel.Typ = Primary
Table = d_ma
Type = all
Possible_key = nULL
Key = NULL
Key_LEN = NULL
Ref = NULL
Row 2024
EXTRA = Using where; Using filesort

Id = 2
Sel.typ = DEPENDET SUBQUERY
Table = temp_day
Type = all
Possible_key = NULL
Key = NULL
Key_len = null
Ref = null
Row = 12335
Extra = Using where

Geändert von sammler2k (30.11.2011 um 09:47 Uhr).
sammler2k ist offline   Mit Zitat antworten
Alt 30.11.2011, 09:54  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
Pos_key = NULL
key = NULL
Keine Indizes auf c_pdiplanas, da wundert micht die lange Laufzeit nicht. Ohne die Query zu kennen kann ich dir nur raten, einen Index auf Ma_ID zu setzen. Warum tippst du das eigentlich alles ab anstatt es einfach zu kopieren?
fab ist offline   Mit Zitat antworten
Alt 30.11.2011, 10:07  
Neuer Benutzer
 
Registriert seit: 17.11.2011
Beiträge: 4
PHP-Kenntnisse:
Anfänger
sammler2k befindet sich auf einem aufstrebenden Ast
Standard

dank dir - werde das mal fix testen
und mich wieder melden.

tippen muss ich weil zwei verschiedene pc's mit unterschiedlichen DSL Anschlüssen - der eine Firmenanschluss ist mir der Proxy nicht geheuer und leider läuft in dem Netzwerk die Datenbank
sammler2k ist offline   Mit Zitat antworten
Alt 30.11.2011, 11:51  
Neuer Benutzer
 
Registriert seit: 17.11.2011
Beiträge: 4
PHP-Kenntnisse:
Anfänger
sammler2k befindet sich auf einem aufstrebenden Ast
Standard

@fab

Big THX

hat funktioniert.
sammler2k ist offline   Mit Zitat antworten
Alt 30.11.2011, 12:07  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Using filesort
Das ist immer ein schlechtes Zeichen. Während "using temporary" die Temp-Tabelle noch im Speicher halten kann, muss "filesort" bereits auf Festplatte umschwenken, was natürlich ein Performancefresser ist.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mitarbeiter für Query OS gesucht Kasenoru Sonstige 0 18.06.2011 00:34
Unabhängige "Auto-Increment Spalte" für ein ON DUPLICATE KEY query? juice122 Datenbanken 4 31.05.2010 20:59
[Erledigt] Table erstellen mit variablem Name Rutor PHP Tipps 2009 10 07.01.2010 12:52
[Erledigt] PHP-DB2 und REORG TABLE Desian Datenbanken 2 21.08.2009 18:27
SQL Error: Can't create table '.\XXX\user_informations.frm' (errno: 150) boolean Datenbanken 2 08.05.2009 11:01
[Erledigt] sqlite query alter table butterkeks PHP-Fortgeschrittene 5 26.09.2008 20:34
PHP/MySQL: QCodo's Code-Generator Zergling-new Tutorials 2 09.05.2008 05:33
Parsen von Delimitern Basti Tutorials 0 30.09.2006 21:24
Truncate table Datenbanken 5 20.01.2006 09:47
[mysql] Table Design bei grossen Datenmengen Datenbanken 5 02.10.2005 13:25
[Erledigt] Problem mit mySQL Datenbanken 7 27.09.2005 12:06
PHP-Fehlermeldung, weiss nicht mehr weiter PHP Tipps 2005-2 12 21.09.2005 12:56
HILFE: Column count doesn't match value count at row 1 Datenbanken 17 12.06.2004 16:45

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
create temporary table, mysql subqueries primary temptable, wie lang bleiben temp table

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




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum