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 23-11-2009, 10:36
keks333
 Registrierter Benutzer
Links : Onlinestatus : keks333 ist offline
Registriert seit: Nov 2009
Beiträge: 20
keks333 befindet sich auf einem aufstrebenden Ast
Question geschwindigkeit

ich habe ein kleines bildervotingscript geschrieben und die abfrage ist trotz weniger einträge bereits sehr lansam...

woran liegts???

PHP-Code:
 $sql safe_query("SELECT bildid, datei, owner FROM loungebilder WHERE ((votes > '10' AND summe > '16') OR votes <= '10') 
  and owner != '$U' and allow_votes = 1 and bildid not in 
   (SELECT bildid FROM picvotes   WHERE userid = '$U') 
ORDER BY RAND() LIMIT 1"
); 
dauert auch ohne not in elemente meiner meinung nach genauso lange
Mit Zitat antworten
  #2 (permalink)  
Alt 23-11-2009, 10:42
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

MySQL führt Subselects nicht besonders schnell aus. Das Order by rand() ist sicher auch ein Problem. Führe mal ein Explain select ... aus und poste das Ergebnis hier.
Mit Zitat antworten
  #3 (permalink)  
Alt 23-11-2009, 10:57
keks333
 Registrierter Benutzer
Links : Onlinestatus : keks333 ist offline
Registriert seit: Nov 2009
Beiträge: 20
keks333 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von PHP-Desaster Beitrag anzeigen
MySQL führt Subselects nicht besonders schnell aus. Das Order by rand() ist sicher auch ein Problem. Führe mal ein Explain select ... aus und poste das Ergebnis hier.
hm google konnt mit ned helfen, wie mach ich sowas?
Mit Zitat antworten
  #4 (permalink)  
Alt 23-11-2009, 11:03
unset
  Moderator
Links : Onlinestatus : unset ist offline
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.782
unset befindet sich auf einem aufstrebenden Ast
Standard

Einfach ein EXPLAIN vor deinen Query schieben (letzter Listenpunkt)
Mit Zitat antworten
  #5 (permalink)  
Alt 23-11-2009, 11:06
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Code:
EXPLAIN SELECT bildid, ...........................
Am einfahsten in phpmyadmin.

Hast du auch einen INDEX für alle Spalten im WHERE gesetzt?

Warum setzt du Zahlen in Anführungszeichen?
Andere DBMS würden dir das um die Ohren hauen.
__________________
Wir werden alle sterben
Mit Zitat antworten
  #6 (permalink)  
Alt 23-11-2009, 11:07
keks333
 Registrierter Benutzer
Links : Onlinestatus : keks333 ist offline
Registriert seit: Nov 2009
Beiträge: 20
keks333 befindet sich auf einem aufstrebenden Ast
Standard

ja hab ich aber wie les ichs aus da kommt dann einfach nix. aso im phpmyadmin... auf der seite direkt mit php geht sowas nich?
nein hab keine indexe gemacht. neuland

id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY loungebilder ALL 1051 Using where; Using temporary; Using filesort Ändern Löschen
2 DEPENDENT SUBQUERY picvotes ALL 177 Using where Ändern Löschen

Geändert von keks333 (23-11-2009 um 11:28 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 23-11-2009, 15:05
keks333
 Registrierter Benutzer
Links : Onlinestatus : keks333 ist offline
Registriert seit: Nov 2009
Beiträge: 20
keks333 befindet sich auf einem aufstrebenden Ast
Standard

und weiter?
Mit Zitat antworten
  #8 (permalink)  
Alt 23-11-2009, 15:16
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Wie? Und?
Was hast du mittlerweile erledigt?


Zeige doch bitte mal das "jetzige" CREATE Statement und dein repariertes SELECT
__________________
Wir werden alle sterben
Mit Zitat antworten
  #9 (permalink)  
Alt 23-11-2009, 15:17
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von keks333 Beitrag anzeigen
und weiter?
Hast du das schon behoben?:

Zitat:
Zitat von combie Beitrag anzeigen
Hast du auch einen INDEX für alle Spalten im WHERE gesetzt?

Warum setzt du Zahlen in Anführungszeichen?
Mit Zitat antworten
  #10 (permalink)  
Alt 23-11-2009, 20:21
keks333
 Registrierter Benutzer
Links : Onlinestatus : keks333 ist offline
Registriert seit: Nov 2009
Beiträge: 20
keks333 befindet sich auf einem aufstrebenden Ast
Standard

ich gebs auf ich hab schon ewig gesucht jetz.
ich wollte den subquery mit MINUS beheben was theretisch funktioneiren würde denke ich aber zeigt immer query fehler.

ich habe gegooglt und den sinn eines indexes vertsanden . steht auch überall wie man einen macht mit sql aber nicht wie man den dann ausliest bzw mit php verarbeitet.

kann mir jemand helfen und einfach ma ein beipiel geben (aus meiner vorlage)
subquery raus ( mit joins oder so ka oder mit MINUS? )

das EXPLAIN hab ich euch ja geliefert...
wär euch echt dankbar. konkrete beispiele sind echt rar

beisiele wie CREATE INDEX IDX_CUSTOMER_LAST_NAME on CUSTOMER (Last_Name)
sind ja toll aber hilft mir kaum, was mach ich dann mit dem restlichen query bzw dem index? stehe aufm schlauch

lg

Geändert von keks333 (23-11-2009 um 20:26 Uhr)
Mit Zitat antworten
  #11 (permalink)  
Alt 23-11-2009, 20:25
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Indizes brauchst du nicht auszulesen oder mit PHP zu verarbeiten. Sie helfen dem DBMS nur, Datensätze schneller zu finden. Du indizierst einfach die richtigen* Spalten und schon geht alles schneller. Das ist alles

___
* die richtigen sind solche, die von Joins mit on oder using benutzt werden oder in Where-Klauseln auftauchen.
Mit Zitat antworten
  #12 (permalink)  
Alt 23-11-2009, 20:25
combie
 PHP Expert
Links : Onlinestatus : combie ist offline
Registriert seit: May 2006
Beiträge: 3.296
combie wird schon bald berühmt werden
Standard

Zitat:
aber nicht wie man den dann ausliest bzw mit php verarbeitet.
Tut man ja auch nicht. Wieso auch?
Ein INDEX beschleunigt das Auslesen, bzw. die Vergleiche im WHERE.

Zitat:
das EXPLAIN hab ich euch ja geliefert...
Das Ergebnis des EXPLAIN sollte sich jetzt geändert haben.
(hoffen wir es mal)

Wenn es irgend geht, solltest du den Subselect entsorgen und stattdessen einen JOIN verwenden.
__________________
Wir werden alle sterben

Geändert von combie (23-11-2009 um 20:28 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 23-11-2009, 20:35
keks333
 Registrierter Benutzer
Links : Onlinestatus : keks333 ist offline
Registriert seit: Nov 2009
Beiträge: 20
keks333 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von combie Beitrag anzeigen
Wenn es irgend geht, solltest du den Subselect entsorgen und stattdessen einen JOIN verwenden. .
wollte statt NOT IN , MINUS nehmen wieso geht das nicht?

und wie mache ich in einem join einen tabellenvergleich in dem eine besteimmte konstelation "ausgeschlossen" wird?

könnt ihr mir einen ansatz geben ich weiß nich wo ich anfangen soll.
hab wirklich schon gesucht ohne ende. joins schön und gut aber wie realisier ich das NOT IN darin?

welche spalten sollte ich den indexieren um den besten erfolg zu bekommen? eine? mehere?
ich komm mir bissl dumm vor :-(
Mit Zitat antworten
  #14 (permalink)  
Alt 23-11-2009, 20:43
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Mein Lieblingsthema: Negativer left Join
Code:
select
	l.bildid,
	l.datei,
	l.owner,
	rand() as position
from loungebilder as l
left join picvotes as p
	on p.bildid = l.bildid and p.userid = '$u'
where p.bildid is null
	and ((l.votes > '10' and l.summe > '16') or l.votes <= '10') 
	and l.owner != '$u'
order by position
limit 1
(nicht getestet)
Mit Zitat antworten
  #15 (permalink)  
Alt 23-11-2009, 20:52
keks333
 Registrierter Benutzer
Links : Onlinestatus : keks333 ist offline
Registriert seit: Nov 2009
Beiträge: 20
keks333 befindet sich auf einem aufstrebenden Ast
Exclamation

Zitat:
Zitat von AmicaNoctis Beitrag anzeigen
Mein Lieblingsthema: Negativer left Join
Code:
 [...]
(nicht getestet)
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE l ALL 1061 Using where; Using temporary; Using filesort Ändern Löschen
1 SIMPLE p ALL 291 Using where; Not exists

funktioniert, ändert aber nix an der abfrage und dauert exact genauso lange. objektiv gesehn is bis jetz die not in abfrage genauso gut bzw schlecht ...
wo setze ich da am besten den index damits was taugt und endlich nicht ganze 3-4 sekunden zum laden braucht ???

wäre ein super referenz beispiel.
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
echo-Geschwindigkeit mnhg PHP Developer Forum 9 25-03-2007 16:54
Geschwindigkeit Floriam BRAINSTORMING PHP/SQL/HTML/JS/CSS 18 13-10-2003 01:56
Upload Geschwindigkeit toshi PHP Developer Forum 1 07-09-2003 16:04
Geschwindigkeit thebrain SQL / Datenbanken 1 29-04-2003 14:08
geschwindigkeit schmalle News / Kostenloses 5 12-09-2001 07:13

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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

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