PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP-MySQL左联接,分组依据,排序依据,限制=糟糕的性能大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我目前正在开发一个应用程序,允许用户使用各种参数搜索文档数据库,并返回一组分页结果.我正在PHP / MysqL中构建它,这不是我通常的开发平台,但是到目前为止它还很出色.

我遇到的问题是,要返回完整的结果集,我必须在每个表上使用LEFT JOIN,这完全破坏了我的性能.开发数据库的人说,我正在使用的查询将返回正确的结果,所以这就是我必须使用的.查询如下,我绝不是sql Guru,可以在此上使用一些帮助.

我一直在想将查询拆分为子查询可能更好?以下是我当前的查询

    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

任何帮助或指导将不胜感激!

沉积表:

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;

日期表

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;

人物类型

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 ;

解决方法:

几乎可以肯定,性能欠佳是由于缺乏索引.您的沉积表没有任何索引,这可能意味着您所引用的其他表也没有任何索引.您可以从在沉积表中添加索引开始.在MysqL SHell或@L_595_22@myAdmin中,发出以下查询.

alter table沉积添加索引(deposition_id,manuscript_number);

您知道在添加索引后查询执行得更快时,您就走对了.从那里,您可能希望将索引放在引用列的其他表上.例如,对于查询的这一部分“ LEFT JOIN person AS p ON p.deposition_id = d.deposition_id”,您可以尝试使用将索引添加到人员表.

alter table人员添加索引(deposition_id);

大佬总结

以上是大佬教程为你收集整理的PHP-MySQL左联接,分组依据,排序依据,限制=糟糕的性能全部内容,希望文章能够帮你解决PHP-MySQL左联接,分组依据,排序依据,限制=糟糕的性能所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: