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 ::

Der CSS-Problemlöser

Der CSS-Problemlöser 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 06.03.2006, 19:39:15
lod_bodo lod_bodo ist offline
Anfänger
 
Registriert seit: Mar 2006
Beiträge: 7
Doppelter Index nach Änderung ?

In einer bestehenden db mySQL 4.0.18 mit Daten habe ich nachträglich folgendes wegen Performance-Steigerung geändert:

1.) Feld fixed auf "NOT NULL" gesetzt (enthielt vorher keinen Wert NULL)
2.) Feld fixed als zus. Index deklariert
3.) Feld pid als zus. Index deklariert

Benutzte Befehle:

ALTER TABLE `forum_entries` CHANGE `fixed` `fixed` TINYINT( 4 ) NOT NULL DEFAULT '0'
ALTER TABLE `forum_entries` ADD INDEX ( `fixed` )
ALTER TABLE `forum_entries` ADD INDEX ( `pid` )

Nun zeigt phpMyAdmin für die Struktur der Tabelle an, dass es zwei Indexe auf fixed gibt:

fixed und fixed_2

mit der Meldung:

Es sollte nicht mehr als ein Index des Typs INDEX für die Spalte `fixed` gesetzt sein.

Ferner zeigt das Explain des zu optimierenden Select-Statements

EXPLAIN SELECT id, pid, tid FROM forum_entries WHERE category = '2' AND pid = 0 ORDER BY fixed DESC LIMIT 30

weiterhin an, dass immer noch ein filesort benutzt wird (unter Extra), obwohl id, pid, tid, category und fixed Indizes sind. Genau wegen des "Using filesort" habe ich den Index auf fixed gesetzt.

Warum dieser Aufwand: ich möchte die letzten n=30 Threads aus einem Forum selektieren inkl. denen, die "fixed" sind, also oben stehen sollen. Anzahl Postings = 50.000, Anzahl user = ca. 100. Daher der Aufwand für eine Optimierung. Sieht jemand eine schnellere Abfrage für diesen Zweck?

Kann mir als mySQL-Novize jemand einen Hinweis geben, was ich falsch gemacht habe?

Danke für jede Bemühung.

Bodo

PS: Hier der Dump nach der Änderung, der den Fehler zeigt (fixed und fixed_2), ich möchte nicht die ganze Tabelle löschen und neu anlegen:

CREATE TABLE `forum_entries` (
`id` int(11) NOT NULL auto_increment,
`pid` int(11) NOT NULL default '0',
`tid` int(11) NOT NULL default '0',
`uniqid` tinytext NOT NULL,
`time` timestamp(14) NOT NULL,
`last_answer` timestamp(14) NOT NULL default '00000000000000',
`edited` timestamp(14) NOT NULL default '00000000000000',
`edited_by` tinytext NOT NULL,
`user_id` int(11) default '0',
`name` tinytext NOT NULL,
`subject` tinytext NOT NULL,
`category` int(11) NOT NULL default '0',
`email` tinytext NOT NULL,
`hp` tinytext NOT NULL,
`place` tinytext NOT NULL,
`ip` tinytext NOT NULL,
`text` text NOT NULL,
`show_signature` tinyint(4) default '0',
`email_notify` tinyint(4) default '0',
`marked` tinyint(4) default '0',
`locked` tinyint(4) default '0',
`fixed` tinyint(4) NOT NULL default '0',
`views` int(11) default '0',
PRIMARY KEY (`id`),
KEY `tid` (`tid`),
KEY `category` (`category`),
KEY `fixed` (`fixed`),
KEY `fixed_2` (`fixed`),
KEY `pid` (`pid`)
) TYPE=MyISAM AUTO_INCREMENT=12647 ;

Geändert von lod_bodo (06.03.2006 um 21:36:15 Uhr)
Mit Zitat antworten
  #2  
Alt 07.03.2006, 15:30:15
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Doppelter Index nach Änderung ?

Einen Index kannst du mit DROP INDEX löschen: http://dev.mysql.com/doc/refman/5.0/en/drop-index.html

Wie sieht denn die komplette Ausgabe der EXPLAIN-Abfrage aus?
Mit Zitat antworten
  #3  
Alt 07.03.2006, 16:39:55
lod_bodo lod_bodo ist offline
Anfänger
 
Registriert seit: Mar 2006
Beiträge: 7
AW: Doppelter Index nach Änderung ?

Hallo xabbuh,

hier die Ausgabe von Explain:

table type possible_keys key key_len ref rows Extra
forum_entries ref category,pid pid 4 const 2056 Using where; Using filesort

Kann ich mit DROP dann nur den Index 'fixed_2' löschen oder wird dann auch der Index vom ganzen Feld entfernt?
Mit Zitat antworten
  #4  
Alt 07.03.2006, 17:14:31
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Doppelter Index nach Änderung ?

Wieviele Einträge existieren ingsesamt in der Tabelle forum_entries?

Zitat:
Zitat von lod_bodo
Kann ich mit DROP dann nur den Index 'fixed_2' löschen?
Ja:
Code:
DROP INDEX fixed_2 ON forum_entries;
Mit Zitat antworten
  #5  
Alt 07.03.2006, 20:19:55
lod_bodo lod_bodo ist offline
Anfänger
 
Registriert seit: Mar 2006
Beiträge: 7
AW: Doppelter Index nach Änderung ?

ca. 50.000, wachsend jeden Monat um ca. 2.000
Mit Zitat antworten
  #6  
Alt 07.03.2006, 20:52:16
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Doppelter Index nach Änderung ?

Was genau ist denn jetzt dein Problem? Das EXPLAIN sieht doch gut aus. Oder dauert die Abfrage so lange?
Mit Zitat antworten
  #7  
Alt 07.03.2006, 21:20:13
lod_bodo lod_bodo ist offline
Anfänger
 
Registriert seit: Mar 2006
Beiträge: 7
AW: Doppelter Index nach Änderung ?

Ich möchte vermeiden, dass das SELECT ein "filesort" macht, damit bei wachsender Anzahl Einträge die Performance auch dann noch gegeben ist, da wir schon mal ca. 100 User haben, die diese Abfrage ständig aufrufen (also wenn möglich alles aus Indizes ermittelt wird).

Also einfach die bestmögliche Laufzeit erreichen.
Mit Zitat antworten
  #8  
Alt 07.03.2006, 22:50:45
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Doppelter Index nach Änderung ?

Das sollte sich nicht sonderlich auf die Performance auswirken. Wenn du praktisch nach dieser Spalte sortierst, könnte es dir vielleicht helfen, die Daten direkt entsprechend sortiert zu speichern:
Code:
ALTER TABLE
    forum_entries
ORDER BY
    fixed
http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
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
Aktualisierung nach Änderung eines Wertes im INPUT Feld juergen HTML, CSS und JavaScript Help! 2 11.06.2005 10:34:06
index in der foreach-schleife gerhard PHP Grundlagen 2 07.11.2004 11:09:08
index, unique, primary Gweilo MySQLi/PDO/(MySQL) 1 08.08.2004 12:04:14
$_POST[... Index Probleme crusader PHP für Fortgeschrittene und Experten 15 04.09.2003 20:24:22
Assoziatives Array -> Löschen von einem bestimmten Index? mad-boy PHP für Fortgeschrittene und Experten 2 24.09.2002 20:19:49


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:05:49 Uhr.


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


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