MySQL Sol katılın, Grup olarak, Order By Sınırı = Berbat Performansı

0 Cevap php

Şu anda kullanıcılar çeşitli Paramaters kullanarak ve disk belleği sonuçları bir dizi dönen belgelerin bir veritabanı üzerinden aramak için izin için bir uygulama geliştiriyorum. Benim her zamanki geliştirme platformu değildir PHP / MySQL, onu bina, ama onun büyük olmuştur şimdiye kadar duyuyorum.

Ben yaşıyorum sorun sonuçlarının tam kümesi döndürmek için ben SOL tamamen benim performansı yok her masada, JOIN kullanmak zorunda olmasıdır. Veritabanı geliştirdi kişi ben kullanıyorum sorgu yüzden kullanmak zorunda thats ne, doğru sonuçları dönecektir söyledi. Sorgu Ben hiçbir şekilde bir SQL Guru tarafından duyuyorum ve bu konuda biraz yardım kullanabilirsiniz altındadır.

Ben alt sorguları sorgu bölmek için daha iyi olabileceğini düşünerek olmuştur? Aşağıda benim geçerli sorgu:

    SELECT d.title, d.deposition_id, d.folio_start, d.folio_end, pl.place_id, p.surname, p.forename, p.person_type_id, pt.person_type_desc, p.age, d.manuscript_number, dt.day, dt.month, dt.year, plc.county_id, c.county_desc
 FROM deposition d 
 LEFT JOIN person AS p ON p.deposition_id = d.deposition_id 
 LEFT JOIN person_type AS pt ON p.person_type_id = pt.person_type_id 
 LEFT JOIN place_link AS pl ON pl.deposition_id = d.deposition_id 
 LEFT JOIN date AS dt ON dt.deposition_id = d.deposition_id 
 LEFT JOIN place AS plc ON pl.place_id = plc.place_id 
 LEFT JOIN county AS c ON plc.county_id = c.county_id
 WHERE 1 AND d.manuscript_number = '840' 
 GROUP BY d.deposition_id ORDER BY d.folio_start ASC
 LIMIT 0, 20

Herhangi bir yardım veya rehberlik büyük mutluluk duyacağız!

Biriktirme Tablo:

CREATE TABLE IF NOT EXISTS `deposition` (
  `deposition_id` varchar(11) NOT NULL default '',
  `manuscript_number` int(10) NOT NULL default '0',
  `folio_start` varchar(4) NOT NULL default '0',
  `folio_end` varchar(4) default '0',
  `page` int(4) default NULL,
  `deposition_type_id` int(10) NOT NULL default '0',
  `comments` varchar(255) default '',
  `title` varchar(255) default NULL,
  PRIMARY KEY  (`deposition_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Tarih Tablo

CREATE TABLE IF NOT EXISTS `date` (
  `deposition_id` varchar(11) NOT NULL default '',
  `day` int(2) default NULL,
  `month` int(2) default NULL,
  `year` int(4) default NULL,
  PRIMARY KEY  (`deposition_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Person_Type

CREATE TABLE IF NOT EXISTS `person_type` (
  `person_type_id` int(10) NOT NULL auto_increment,
  `person_type_desc` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`person_type_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=59 ;

0 Cevap