php-resource



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

Login

 
eingeloggt bleiben || php-forumjetzt anmelden
 

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 18-08-2006, 14:28
akkie
 Newbie
Links : Onlinestatus : akkie ist offline
Registriert seit: Jan 2003
Beiträge: 34
akkie ist zur Zeit noch ein unbeschriebenes Blatt
Standard Optimierung eines Queries bei 700000 Datensätzen

Hallo

Ich bräuchte mal Hilfe bei der Optimierung eines Queries. Ich möchte eine Suche bauen. Die Suche zieht sich über mehrere Tabellen. In der Datenbank sind jetzt ca 700000 Datensätze.
Der jetzige Query dauert ca. 5 Sekunden. Das ist aber viel zu langsam. Auf die Felder die in der Where oder ON Klausel sind wurden Indexe gesetzt. Was kann ich noch tun. Oder geht es nicht schneller? Ich habe keinerlei Vergleichsdaten.

Mein Query sieht so aus.

PHP-Code:
SELECT
                
`user`.`userId`,
                `
user`.`pseudonym`,
                `
user`.`lastLogin`,
                `
user`.`country`,
                `
user`.`language`,
                `
userprofile`.`verified`,
                `
userprofile`.`dateofbirth`,
                `
userprofile`.`zipcode`,
                CASE 
WHEN (`online`.`accesstime` + 900) > UNIX_TIMESTAMP(UTC_TIMESTAMP())
                    
THEN 1
                    
ELSE 0
                END 
as `online`,
                CASE 
WHEN `properties`.`pictures` > 0
                    THEN 1
                    
ELSE 0
                END 
as `picture`
            
FROM `fxp_user`.`user
            
JOIN `fxp_user`.`userprofileON `user`.`userId` = `userprofile`.`userId`
            
JOIN `fxp_user`.`searchprofileON `userprofile`.`userId` = `searchprofile`.`userId`
            
LEFT JOIN `i21s_i18n`.`timezonesON `user`.`timezone` = `timezones`.`timezone`
            
LEFT JOIN `fxp_stats`.`onlineON `searchprofile`.`userId` = `online`.`userId`
            
LEFT JOIN `fxp_photoalbum`.`propertiesON `searchprofile`.`userId` = `properties`.`userId`
            
WHERE `user`.`profilestatus` = 'complete'
                
AND `user`.`country` = 'DE'
                
AND `userprofile`.`gender` = 'male'
                
AND `searchprofile`.`gender` = 'female'
                
AND `userprofile`.`heightBETWEEN 155 AND 185
                
AND `userprofile`.`zipcodeIN(73560,73540,73563,73574,73572,73571,73575,73579,73527,
73529,73457,73566,73557,73550,73525,73569,73453,73577,
73568,73111,73430,73565,73447,73431,73434,89558,73433,
73553,73113,73460,73486,74429,73491,89551,73072,73547,
89555,74417,73116,73432,73079,73084,74426,73054,73102,
73492,73333,73463,73037,73104,73642,73329,73098,89518,
89520,73479,89547,74405,73667,73035,73655,73312,73494,
74424,89522,74427,73114,73033,73099,73117,73337,73660,
73107,73466,73340,74423,73092,89564,89174,73066,73489,
73108,73326,73105,89542,73614,71566,89197,74586,73635,
74420,73087,74544,73095,89173,73061,73110,73342,71540,
73488,73450,74538,89177,74597,73119,89189,73441,73344,
74541,89428,73650,89191,89537,71549,89447,73669,71554,
73278,73101,73663,73347,89183,89198,73275,71573,73499)
                
                
                
                
                
            
            
ORDER BY `user`.`lastLogin`
            
LIMIT 120 
Mfg Akkie

Geändert von akkie (18-08-2006 um 16:56 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 18-08-2006, 14:33
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Das ist aber viel zu schnell
...
Oder geht es nicht schneller?
Wenn es schon zu schnell ist warum willste es dann noch schneller ? Oder kriegst du bei dieser Geschwindigkeit nicht alle gewünschten Daten zurück ?
Wenn es alle Daten sind dann würde ich sagen 70'000 Datensätze in 5 Sekunden zu durchsuchen ist sicherlich nicht langsam

Gruss

tobi
__________________
Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #3 (permalink)  
Alt 18-08-2006, 14:40
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich denke auch 5 Sekunden sind bei einem solchen Query nicht langsam, die Frage ist nur wie weit das Resourcen verbraucht.
Wenn der DB-Server in der Zeit einfach alle anderen Abfragen abschmettert, schafft er zwar die 5 Sekunden, aber der Query ist trotzdem lastig.

Vielleicht mal ein paar Daten redundant abspeichern? D.h. die JOINs versuchen zu reduzieren, indem man die Werte direkt in fxp_user speichert?!
Mit Zitat antworten
  #4 (permalink)  
Alt 18-08-2006, 15:19
akkie
 Newbie
Links : Onlinestatus : akkie ist offline
Registriert seit: Jan 2003
Beiträge: 34
akkie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi

Danke für die schnellen Antworten. Also die 5 Sekunden sind inakzeptabel. Bei erwünschten 150 Anfragen pro Sekunde steht der Server ja nur.

Ich werde jetzt eine Extra Tabelle erstellen in die ich die Daten redundant speichere. Wenn ich einen on update Trigger auf die Original Tabellen setze sollten die Daten auch immer aktuell sein.

Mfg Akkie
Mit Zitat antworten
  #5 (permalink)  
Alt 18-08-2006, 15:49
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

schreibe mal EXPLAIN vor die Abfrage im PHPmyadmin, und poste die Ausgabe hier
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #6 (permalink)  
Alt 18-08-2006, 16:23
akkie
 Newbie
Links : Onlinestatus : akkie ist offline
Registriert seit: Jan 2003
Beiträge: 34
akkie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi

PHP-Code:
(
    [
id] => 1
    
[select_type] => SIMPLE
    
[table] => online
    
[type] => system
    
[possible_keys] => PRIMARY
    
[key] => 
    [
key_len] => 
    [
ref] => 
    [
rows] => 0
    
[Extra] => const row not found
)
Array
(
    [
id] => 1
    
[select_type] => SIMPLE
    
[table] => properties
    
[type] => system
    
[possible_keys] => PRIMARY
    
[key] => 
    [
key_len] => 
    [
ref] => 
    [
rows] => 0
    
[Extra] => const row not found
)
Array
(
    [
id] => 1
    
[select_type] => SIMPLE
    
[table] => user
    
[type] => ref
    
[possible_keys] => PRIMARY,profilestatus,country
    
[key] => country
    
[key_len] => 1
    
[ref] => const
    [
rows] => 223906
    
[Extra] => Using whereUsing filesort
)
Array
(
    [
id] => 1
    
[select_type] => SIMPLE
    
[table] => searchprofile
    
[type] => eq_ref
    
[possible_keys] => PRIMARY
    
[key] => PRIMARY
    
[key_len] => 4
    
[ref] => fxp_user.user.userId
    
[rows] => 1
    
[Extra] => Using where
)
Array
(
    [
id] => 1
    
[select_type] => SIMPLE
    
[table] => userprofile
    
[type] => eq_ref
    
[possible_keys] => PRIMARY,zipcode,height,gender
    
[key] => PRIMARY
    
[key_len] => 4
    
[ref] => fxp_user.searchprofile.userId
    
[rows] => 1
    
[Extra] => Using where
)
Array
(
    [
id] => 1
    
[select_type] => SIMPLE
    
[table] => timezones
    
[type] => eq_ref
    
[possible_keys] => PRIMARY
    
[key] => PRIMARY
    
[key_len] => 1
    
[ref] => fxp_user.user.timezone
    
[rows] => 1
    
[Extra] => 

Mfg Akkie
Mit Zitat antworten
  #7 (permalink)  
Alt 18-08-2006, 16:26
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

bitte mal in Tabellenform, so kann das ja keiner lesen

das was ich bis jetzt erkennen kann:

du solltest die Indezies auf user, userprofile und searchprofile vergrößern
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
  #8 (permalink)  
Alt 18-08-2006, 16:40
akkie
 Newbie
Links : Onlinestatus : akkie ist offline
Registriert seit: Jan 2003
Beiträge: 34
akkie ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
ID        select_type        table            type        possible_keys                    key            key_len        ref                                rows        Extra
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1        SIMPLE            online            system        PRIMARY                                                                                    0            const row not found
1        SIMPLE            properties        system        PRIMARY                                                                                    0            
const row not found
1        SIMPLE            user            ref            PRIMARY
,profilestatus,country    country        1            const                            223906        Using whereUsing filesort
1        SIMPLE            searchprofile    eq_ref        PRIMARY                            PRIMARY        4            fxp_user
.user.userId            1            Using where
1        SIMPLE            userprofile        eq_ref        PRIMARY
,zipcode,height,gender    PRIMARY        4            fxp_user.searchprofile.userId    1            Using where
1        SIMPLE            timezones        eq_ref        PRIMARY                            PRIMARY        1            fxp_user
.user.timezone            1 
Was schlägst du für Werte vor?
Mit Zitat antworten
  #9 (permalink)  
Alt 18-08-2006, 19:43
TBT
  Moderator
Links : Onlinestatus : TBT ist offline
Registriert seit: Sep 2002
Ort: Berlin
Beiträge: 2.787
TBT befindet sich auf einem aufstrebenden Ast
TBT eine Nachricht über ICQ schicken TBT eine Nachricht über AIM schicken TBT eine Nachricht über Yahoo! schicken
Standard

erweitere mal beim user den index "country" um die Spalte "profilstatus"
__________________
TBT

Die zwei wichtigsten Regeln für eine berufliche Karriere:
1. Verrate niemals alles was du weißt!


PHP 2 AllPatrizier II Browsergame
Mit Zitat antworten
Antwort

Lesezeichen


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

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

OnPremise versus Cloud - das richtige System finden
Wir beleuchten in diesem Artikel, die Vor- und Nachteile für Cloud oder OnPremise Systemen. Und warum es definitiv Zeit wird in die Cloud zu wechseln.

09.05.2022 | julia_mjr

Warum Texterstellung mit künstlicher Intelligenz richtig gut ist
Warum Texterstellung mit künstlicher Intelligenz richtig gut istKünstliche Intelligenz ist dabei, die Welt zu erobern. Die größten Unternehmen entwickeln Systeme, die einen Text für Sie schreiben können. Und sie machen das sehr gut.

05.01.2022 | Berni


 

Aktuelle PHP Scripte

phpBasics Counter

Der Counter arbeitet mit einer klassischen einstellbaren IP-Reloadsperre. Er zählt die Besucher, die Seitenaufrufe und ermittelt auch die aktuellen Onlineuser. Zur Datenspeicherung wird eine MySQL-Datenbank genutzt. Der Counter überprüft seine Instal

09.09.2022 numaek | Kategorie: PHP/ Counter
MyPHPlib-Bibliotheksverwaltung

MyPHPlib ist eine Scriptsammlung, mit der die Bibliotheksverwaltung incl. Ausleihe und Recherche gelingt. Die Scriptsammlung wird seit Mitte 2005 entwickelt und ist besonders an den Bedürfnissen von Schulen angepasst.

11.08.2022 RobertG | Kategorie: PHP/ Management
responsive vertikales Menu

Diese Menu basiert auf php, jQuery, css und ajax. Wer sein Menu mit nested sets vertikal realisieren will, findet darin eine gute Lösung.

11.08.2022 COVISIONMEDIA | Kategorie: JAVASCRIPT/ Navigation
 Alle PHP Scripte anzeigen

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