phpbar.de logo

Mailinglisten-Archive

Query-Optimierung

Query-Optimierung

Christian Thiele mysql-de_(at)_lists.bttr.org
Mon, 6 May 2002 23:18:23 +0200


Hi,

ich versuche folgendes Query zu optimieren, da sie ab und an im Slow-Query
Log auftaucht.

select c.name as country from country as c left join profiles as p on
p.country = c.c_id order by p.adddate desc limit 0,5 (liefert die 5
aktuellsten Profile)

Das lieferte mir ein Explain :

c -> ALL -> ref:  -> rows: 8  -> Using temporary; Using filesort
p -> ref -> ref: c.c_id -> rows: 1776

Ich komm nicht so recht weiter, ich weiß nicht warum er immer die gesamte
Country-Tabelle durchsucht...
und das kostet ja dann doch Performance...*grübel*, isses nur zu spät, hab
ich was übersehen oder gehts
net anders???

CREATE TABLE profiles (
  username varchar(32) NOT NULL default '',
  name varchar(25) NOT NULL default '',
  sex char(1) NOT NULL default '',
  category tinyint(3) NOT NULL default '0',
  subcategory tinyint(3) NOT NULL default '0',
  country tinyint(3) NOT NULL default '0',
  plz varchar(8) NOT NULL default '',
  city varchar(30) NOT NULL default '',
  state tinyint(3) NOT NULL default '0',
  birthday date NOT NULL default '0000-00-00',
  height varchar(5) NOT NULL default '',
  weight tinyint(4) NOT NULL default '0',
  eyecolor varchar(25) NOT NULL default '',
  haircolor varchar(25) NOT NULL default '',
  job varchar(25) NOT NULL default '',
  look varchar(60) NOT NULL default '',
  hobbies text NOT NULL,
  cool text NOT NULL,
  notcool text NOT NULL,
  more text NOT NULL,
  homepage varchar(100) NOT NULL default '',
  adddate varchar(16) NOT NULL default '0000-00-00',
  image varchar(5) NOT NULL default '',
  active char(1) NOT NULL default '',
  mailcount smallint(6) NOT NULL default '0',
  viewcount int(10) unsigned default '0',
  voting int(11) NOT NULL default '0',
  allow_vote char(1) NOT NULL default 'Y',
  voters int(11) NOT NULL default '0',
  lastvisits varchar(160) default NULL,
  PRIMARY KEY  (username),
  KEY birthday_idx (birthday),
  KEY image_idx (image),
  KEY sex_idx (sex),
  KEY state_idx (state),
  KEY country (country)
) TYPE=MyISAM;


CREATE TABLE country (
  c_id tinyint(3) NOT NULL default '0',
  name varchar(25) NOT NULL default '',
  PRIMARY KEY  (c_id)
) TYPE=MyISAM;

Danke!

Christian

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive