Klingt gut, wenn ich auch nicht wirklich weiß, wozu hier dann überhaupt so viele Indexe verbaut wurden...kann ich irgendwie nach den eigens erstellten Indexen in der forenstruktur suchen um zu sehen ob so ein extra exotischer Index wie attach_id_privmsgs_id überhaubt benutzt wird, will sagen, kann ich da den Rest meiner mysql_schema.sql mal nach unnützen Indexen durchforsten, oder ist das nicht so einfach möglich?
Ich nehme mal zudem an, wenn ich das nun beginne etwas zu verstehen, das ein Primary Key nur nötig wäre, wenn es ein auto_incremet in der Tabelle gibt?
Könnte ich also (was ist denn überhaubt der Unterschied zwischen Promary und Normal in diesem Fall) z.B. das folgende statt mittels Primary Key auch mittels Key lösen...oder ist das egal?
Code: Alles auswählen
CREATE TABLE phpbb_attachments_config (
config_name varchar(255) NOT NULL,
config_value varchar(255) NOT NULL,
PRIMARY KEY (config_name)
) TYPE=MyISAM;
Bzw. nochmal zur sessions-Tabelle...müßte die dann nicht nach Adam Riese statt so:
Code: Alles auswählen
CREATE TABLE phpbb_sessions (
session_id char(32) DEFAULT '' NOT NULL,
session_user_id mediumint(8) DEFAULT '0' NOT NULL,
session_start int(11) DEFAULT '0' NOT NULL,
session_time int(11) DEFAULT '0' NOT NULL,
session_ip char(8) DEFAULT '0' NOT NULL,
session_page int(11) DEFAULT '0' NOT NULL,
session_topic int(11) DEFAULT '0' NOT NULL,
session_logged_in tinyint(1) DEFAULT '0' NOT NULL,
session_admin tinyint(2) DEFAULT '0' NOT NULL,
PRIMARY KEY (session_id),
KEY session_user_id (session_user_id),
KEY session_id_ip_user_id (session_id, session_ip)
) TYPE=MyISAM;
...so lauten:
Code: Alles auswählen
CREATE TABLE phpbb_sessions (
session_id char(32) DEFAULT '' NOT NULL,
session_user_id mediumint(8) DEFAULT '0' NOT NULL,
session_start int(11) DEFAULT '0' NOT NULL,
session_time int(11) DEFAULT '0' NOT NULL,
session_ip char(8) DEFAULT '0' NOT NULL,
session_page int(11) DEFAULT '0' NOT NULL,
session_topic int(11) DEFAULT '0' NOT NULL,
session_logged_in tinyint(1) DEFAULT '0' NOT NULL,
session_admin tinyint(2) DEFAULT '0' NOT NULL,
KEY (session_id, session_ip),
KEY session_user_id (session_user_id)
) TYPE=MyISAM;
...also PRIMARY raus da kein auto_incremet und zudem session_ip nach oben, da session_id_ip_user_id bei mir in keiner Abfrage im forum auftaucht...(nach Suche in allen Dateien)? Oder einfach mit PRIMARY um da nicht dran rumzupfuschen, als PRIMARY KEY (session_id, session_ip)?
Noch ein Gedanke, der falsch sein mag...ein Index dient der schnelleren Abfragen-Findung bzw. Sortierung? Wenn dem so ist, wäre da nicht in
Code: Alles auswählen
CREATE TABLE phpbb_forums (
forum_id smallint(5) UNSIGNED NOT NULL,
cat_id mediumint(8) UNSIGNED NOT NULL,
forum_name varchar(150),
forum_desc text,
forum_rules text NOT NULL,
forum_status tinyint(4) DEFAULT '0' NOT NULL,
forum_order mediumint(8) UNSIGNED DEFAULT '1' NOT NULL,
forum_posts mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
forum_topics mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
forum_views mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
forum_last_post_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
forum_notify tinyint(1) UNSIGNED DEFAULT '1' NOT NULL,
prune_next int(11),
prune_enable tinyint(1) DEFAULT '0' NOT NULL,
rules_display_title tinyint(1) DEFAULT '1' NOT NULL,
rules_custom_title varchar(80) NOT NULL,
rules_in_viewforum tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
rules_in_viewtopic tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
rules_in_posting tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
auth_view tinyint(2) DEFAULT '0' NOT NULL,
auth_read tinyint(2) DEFAULT '0' NOT NULL,
auth_post tinyint(2) DEFAULT '0' NOT NULL,
auth_reply tinyint(2) DEFAULT '0' NOT NULL,
auth_edit tinyint(2) DEFAULT '0' NOT NULL,
auth_delete tinyint(2) DEFAULT '0' NOT NULL,
auth_sticky tinyint(2) DEFAULT '0' NOT NULL,
auth_announce tinyint(2) DEFAULT '0' NOT NULL,
auth_vote tinyint(2) DEFAULT '0' NOT NULL,
auth_pollcreate tinyint(2) DEFAULT '0' NOT NULL,
auth_attachments tinyint(2) DEFAULT '0' NOT NULL,
auth_download tinyint(2) DEFAULT '0' NOT NULL,
sort_attach_field varchar(50) DEFAULT 'filetime' NOT NULL,
sort_attach_order varchar(5) DEFAULT 'DESC' NOT NULL,
image_ever_thumb tinyint(1) DEFAULT '0' NOT NULL,
PRIMARY KEY (forum_id),
KEY forums_order (forum_order),
KEY cat_id (cat_id),
KEY forum_last_post_id (forum_last_post_id)
) TYPE=MyISAM;
ein Index auf forum_status noch angebracht? so wäre bei vielen foren in der viewforum.php z.B. doch ein Aufbau schneller...oder bin ich hier auf dem spekulativen Holzweg?
...und zu guter Letzt wäre hier:
Code: Alles auswählen
CREATE TABLE phpbb_banlist (
ban_id mediumint(8) UNSIGNED NOT NULL auto_increment,
ban_userid mediumint(8) DEFAULT '0' NOT NULL,
ban_ip char(8) DEFAULT '' NOT NULL,
ban_email varchar(255) DEFAULT NULL,
PRIMARY KEY (ban_id),
KEY ban_ip_user_id (ban_ip, ban_userid)
) TYPE=MyISAM;
nicht besser:
Code: Alles auswählen
CREATE TABLE phpbb_banlist (
ban_id mediumint(8) UNSIGNED NOT NULL auto_increment,
ban_userid mediumint(8) DEFAULT '0' NOT NULL,
ban_ip char(8) DEFAULT '' NOT NULL,
ban_email varchar(255) DEFAULT NULL,
PRIMARY KEY (ban_id),
KEY ban_userid (ban_userid, ban_ip)
) TYPE=MyISAM;
....da ich auch hier wieder kein ban_ip_user_id finden kann, bzw. ban_userid ja eh Indiziert wird...
Der Grund, warum ich Frage ist diese Anzeige in phpMyAdmin:
Code: Alles auswählen
Select_full_join 123 Anzahl der Joins ohne Schlüssel. Wenn dieser Wert nicht 0 ist sollten die Indizes der Tabellen sorgfältig überprüft werden.
Das muß nicht an phpBB liegen, da hier auch die DB für ISPConfig (meine Server-Software) drin steckt und die hat viele doppelte Indexe zwecks abwärtskompatibilität zu mysql 3 drin...aber ich dachte, ich schau und frag mal hier nach, wo ich doch immer gerne verbessere aber wirklich kein genie in diesen dingen bin (eher gern durchs fragen dazulerne :-) )