Как я могу оптимизировать этот запрос в MYSQL?Что должно быть сделано - PullRequest
3 голосов
/ 19 августа 2010

Пожалуйста, прокрутите вниз до " 25/08/2010 Update ".

У меня есть запрос, который я превратил в представление.Он работает очень медленно, потому что (насколько я понимаю) есть несколько проблем с индексами в соединенных таблицах.


explain select * from view_ed_abc_print

alt text


Как вы можетевидите, у меня есть таблица "a" с использованием where, временного и файловой сортировки с 4659 строками, что, как я понимаю, означает, что она должна проходить через 4659 строк для каждой возвращаемой строки.

Я пропустил запрос, потому что он действительно очень длинный и ужасно форматируется здесь (это исходит из представления, вызывающего некоторые проблемы

У кого-нибудь есть идеи?


Привет, ребята,

Спасибо за ваши ответы. Я создал индексы для всех внешних ключей и добавил первичный ключ в таблицы типов публикаций и типов аудита (к сожалению, это было глупо)

В любом случае, вот новое объяснение alt text

И это часть запроса where / from (извините, по какой-то причине форматирование потеряно)

 from
   (
      (
         (
            (
               (
                  `auau7859_aba`.`ed_abc_publication_audits` `a` use index(pubid)
                  left join `auau7859_aba`.`public_publications` `p` on
                  (
                     (`p`.`pubid` = `a`.`audit_pubid`)
                  )
               )
               left join `auau7859_aba`.`ed_aba_frequencies` on
               (
                  (
                     `auau7859_aba`.`ed_aba_frequencies`.`frequencyid` = `p`.`pub_frequencyid`
                  )
               )
            )
            left join `auau7859_aba`.`ed_abc_publicationtypes` on
            (
               (
                  `auau7859_aba`.`ed_abc_publicationtypes`.`publicationtypeid` = `p`.`pub_type`
               )
            )
         )
         left join `auau7859_aba`.`ed_abc_audittypes` on
         (
            (`a`.`audit_type` = `auau7859_aba`.`ed_abc_audittypes`.`audittypeid`)
         )
      )
      left join `auau7859_aba`.`Members` `m` on((`m`.`MemID` = `p`.`pub_memid`))
   )   where ((`a`.`audit_active` = 1) and (`p`.`pub_unfinancial` = 0))
   order by `a`.`audit_anps` desc

Запроссейчас время намного лучше, но мне интересно, можно ли заставить таблицу «а» начать использовать этот ключ вместо «Использование сортировки файлов», которое я прочитал, действительно медленно.


По запросу, вот определение для соответствующих таблиц. ed_abc_publication_audits

     CREATE TABLE `ed_abc_publication_audits` (
            `auditid` INT(11) NOT NULL AUTO_INCREMENT,
            `audit_period` INT(11) NULL DEFAULT '0',
            `audit_year` INT(11) NULL DEFAULT '0',
            `audit_pubid` INT(11) NULL DEFAULT '0',
            `audit_frequencyid` INT(11) NULL DEFAULT '0',
            `audit_issues` VARCHAR(50) NULL DEFAULT NULL,
            `audit_exclusions` TINYINT(4) NULL DEFAULT '0',
            `deprecated_dayspublished` INT(11) NULL DEFAULT '0',
            `audit_specialpublishingday` VARCHAR(50) NULL DEFAULT NULL,
            `audit_bumperissues` TINYINT(4) NULL DEFAULT '0',
            `audit_bumperissuedates` TEXT NULL,
            `audit_bumperissuelinked` TINYINT(4) NULL DEFAULT '0',
            `audit_excludeddates` TEXT NULL,
            `audit_coverprice` DECIMAL(10,2) NULL DEFAULT '0.00',
            `audit_coverpriceday` VARCHAR(100) NULL DEFAULT '0',
            `audit_coverprice2` DECIMAL(10,2) NULL DEFAULT '0.00',
            `audit_coverprice2day` VARCHAR(100) NULL DEFAULT '0',
            `audit_coverprice3` DECIMAL(10,2) NULL DEFAULT '0.00',
            `audit_coverprice3day` VARCHAR(100) NULL DEFAULT '0',
            `audit_osmoney` INT(11) NULL DEFAULT '0',
            `audit_type` INT(11) NULL DEFAULT '0',
            `audit_anps` INT(11) NULL DEFAULT '0',
            `audit_inexcess` TINYINT(4) NULL DEFAULT '0',
            `audit_periodadjustment` TINYINT(4) NULL DEFAULT '0',
            `audit_periodadjustmentvalue` INT(11) NULL DEFAULT '0',
            `audit_nznps` INT(11) NULL DEFAULT '0',
            `audit_nzinexcess` TINYINT(4) NULL DEFAULT '0',
            `audit_othercountries` INT(11) NULL DEFAULT '0',
            `audit_ocinexcess` TINYINT(4) NULL DEFAULT '0',
            `audit_inclaccomairlinesales` DOUBLE NULL DEFAULT '0',
            `audit_incleducationalsales` DOUBLE NULL DEFAULT '0',
            `audit_incleventsales` DOUBLE NULL DEFAULT '0',
            `audit_inclmultiplepublicationsales` DOUBLE NULL DEFAULT '0',
            `audit_bundledsales` DOUBLE NULL DEFAULT NULL,
            `audit_exclaustraliaother` INT(11) NULL DEFAULT '0',
            `audit_exclinexcess` TINYINT(4) NULL DEFAULT '0',
            `audit_nimcopiesprinted` INT(11) NULL DEFAULT '0',
            `audit_nimcopiesdelivered` INT(11) NULL DEFAULT '0',
            `audit_nimcopiesmailed` INT(11) NULL DEFAULT '0',
            `audit_remarks` TEXT NULL,
            `audit_coverprice4day` INT(10) NULL DEFAULT NULL,
            `audit_coverprice4` DECIMAL(10,2) NULL DEFAULT NULL COMMENT 'CoverPrice4',
            `audit_issuesaudited` INT(10) NULL DEFAULT NULL,
            `audit_nonpublishingdates` VARCHAR(45) NULL DEFAULT NULL,
            `audit_digital_anps` INT(10) NULL DEFAULT NULL,
            `audit_digital_inclaccomairlinesales` DOUBLE NULL DEFAULT NULL,
            `audit_digital_incleducationalsales` DOUBLE NULL DEFAULT NULL,
            `audit_digital_incleventsales` DOUBLE NULL DEFAULT NULL,
            `audit_digital_inclmultiplepublicationsales` DOUBLE NULL DEFAULT NULL,
            `audit_digital_bundledsalesdigital` DOUBLE NOT NULL,
            `deprecated_FirstSignatoryName` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_FirstSignatoryEmail` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_SecondSignatoryName` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_SecondSignatoryEmail` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_FormStatus` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_dateSubmitted` VARCHAR(255) NULL DEFAULT NULL,
            `audit_datecreated` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
            `deprecated_dateSignatoryApproved` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_AuditorName` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_AuditorEmail` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_dateAuditorApproved` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_nPeriod` INT(11) NULL DEFAULT NULL,
            `deprecated_nYear` INT(10) NULL DEFAULT NULL,
            `audit_totalissuesaudited` INT(10) NULL DEFAULT NULL,
            `audit_parentpublication` INT(10) NULL DEFAULT NULL,
            `audit_auditenddate` VARCHAR(20) NULL DEFAULT NULL,
            `audit_digital_bumperissuedates` TEXT NULL,
            `audit_digital_bumperissues` TINYINT(4) NULL DEFAULT NULL,
            `audit_digital_bumperissueslinked` TINYINT(4) NULL DEFAULT NULL,
            `audit_digital_coverprice2` DECIMAL(10,2) NULL DEFAULT NULL,
            `audit_digital_coverprice2day` VARCHAR(25) NULL DEFAULT NULL,
            `audit_digital_coverprice3` DECIMAL(10,2) NULL DEFAULT NULL,
            `audit_digital_coverprice3day` VARCHAR(25) NULL DEFAULT NULL,
            `audit_digital_coverprice4` DECIMAL(10,2) NULL DEFAULT NULL,
            `audit_digital_coverprice4day` VARCHAR(25) NULL DEFAULT NULL,
            `audit_digital_coverprice` DECIMAL(18,2) NULL DEFAULT NULL,
            `audit_digital_coverpriceday` VARCHAR(25) NULL DEFAULT NULL,
            `audit_daysbetween` INT(11) NULL DEFAULT NULL,
            `audit_digital_excludeddates` TEXT NULL,
            `audit_digital_issuesaudited` INT(11) NULL DEFAULT NULL,
            `audit_digital_issues` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_lodgementstatus` VARCHAR(255) NULL DEFAULT NULL,
            `deprecated_lodgementtype` VARCHAR(255) NULL DEFAULT NULL,
            `audit_nimaveragecopiesdelivered` INT(11) NULL DEFAULT NULL,
            `audit_nimaveragecopiesmailed` INT(11) NULL DEFAULT NULL,
            `audit_nimaveragecopiesprinted` INT(11) NULL DEFAULT NULL,
            `audit_digital_nonpublishingdates` VARCHAR(45) NULL DEFAULT NULL,
            `Remarks` TEXT NULL,
            `audit_digital_remarks` TEXT NULL,
            `deprecated_s2complete` INT(11) NULL DEFAULT NULL,
            `deprecated_s3complete` INT(11) NULL DEFAULT NULL,
            `audit_stageid` INT(11) NULL DEFAULT NULL,
            `audit_periodenddate` DATE NULL DEFAULT NULL,
            `audit_periodstartdate` DATE NULL DEFAULT NULL,
            `audit_dayspublished` SET('mon','tue','wed','thu','fri','sat','sun') NULL DEFAULT NULL,
            `audit_active` TINYINT(1) UNSIGNED NULL DEFAULT '1',
            `deprecated_auditor_name` VARCHAR(255) NULL DEFAULT NULL COMMENT 'abc_status',
            `audit_auditor_id` INT(10) NULL DEFAULT NULL COMMENT 'This is the auditor ID that has been pulled from the abc status table. WARNING: THIS IS from abcUSERS',
            `deprecated_auditor_email` VARCHAR(255) NULL DEFAULT NULL COMMENT 'abc_status',
            `deprecated_publisher_name` VARCHAR(255) NULL DEFAULT NULL COMMENT 'abc_status',
            `audit_author_id` INT(10) NULL DEFAULT NULL COMMENT 'the author id from the abc_status. WARNING: ABCUsers TAble, not scmod',
            `deprecated_publisher_email` VARCHAR(255) NULL DEFAULT NULL COMMENT 'abc_status',
            PRIMARY KEY (`auditid`),
            INDEX `pubid` (`audit_pubid`),
            INDEX `audit_type` (`audit_type`),
            INDEX `audit_periodenddate` (`audit_periodenddate`),
            INDEX `audit_periodstartdate` (`audit_periodstartdate`),
            INDEX `audit_anps` (`audit_anps`),
            INDEX `orderby` (`audit_pubid`, `audit_anps`)
        )
        COMMENT='aba_cmt'
        COLLATE='latin1_swedish_ci'
        ENGINE=MyISAM
        ROW_FORMAT=DEFAULT
        AUTO_INCREMENT=5483

таблица public_publications (p)

CREATE TABLE `public_publications` (
    `pubid` INT(11) NOT NULL AUTO_INCREMENT,
    `pub_memid` DOUBLE NULL DEFAULT NULL,
    `pub_ledger_code` VARCHAR(255) NULL DEFAULT NULL,
    `pub_title` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_previousname` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_tSummaryTitle` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_bBillPublisher` DOUBLE NULL DEFAULT NULL,
    `deprecated_bBillOtherMember` DOUBLE NULL DEFAULT NULL,
    `deprecated_BillMemID` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_BBillAdHocAddress` DOUBLE NULL DEFAULT NULL,
    `pub_address` VARCHAR(255) NULL DEFAULT NULL,
    `pub_suburb` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_state1` VARCHAR(255) NULL DEFAULT NULL,
    `pub_mlocation` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_postcode` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_membership_amount` DOUBLE NULL DEFAULT NULL,
    `deprecated_receipt_date` VARCHAR(255) NULL DEFAULT NULL,
    `pub_abc` DOUBLE NULL DEFAULT NULL,
    `pub_unfinancial` TINYINT(1) NULL DEFAULT '0',
    `pub_auditmemid` DOUBLE NULL DEFAULT NULL,
    `deprecated_auditorid` DOUBLE NULL DEFAULT NULL,
    `pub_audittype` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_PubType` DOUBLE NULL DEFAULT NULL,
    `pub_classification` INT(11) NULL DEFAULT NULL,
    `deprecated_OldPubID` DOUBLE NULL DEFAULT NULL,
    `deprecated_OldCompanyID` DOUBLE NULL DEFAULT NULL,
    `pub_contactid` DOUBLE NULL DEFAULT NULL,
    `pub_auditremarks` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_bGovernment` DOUBLE NULL DEFAULT NULL,
    `deprecated_bExGovernment` DOUBLE NULL DEFAULT NULL,
    `deprecated_dDateJoined` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_tDaysPublished` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_stateid` VARCHAR(50) NULL DEFAULT NULL,
    `deprecated_PublisherCost` DOUBLE NULL DEFAULT NULL,
    `pub_magazinecategory` DOUBLE NULL DEFAULT NULL,
    `deprecated_dayspublished` DOUBLE NULL DEFAULT NULL,
    `pub_frequency` VARCHAR(255) NULL DEFAULT NULL,
    `pub_type` INT(11) NULL DEFAULT NULL,
    `pub_subtype` VARCHAR(255) NULL DEFAULT NULL,
    `deprecated_MYOBExport` DOUBLE NULL DEFAULT NULL,
    `deprecated_periodJAN-JUNE` DOUBLE NULL DEFAULT NULL,
    `deprecated_periodJUL-DEC` DOUBLE NULL DEFAULT NULL,
    `deprecated_periodJAN-MAR` DOUBLE NULL DEFAULT NULL,
    `deprecated_periodAPR-JUN` DOUBLE NULL DEFAULT NULL,
    `deprecated_periodJUL-SEPT` DOUBLE NULL DEFAULT NULL,
    `deprecated_periodOCT-DEC` DOUBLE NULL DEFAULT NULL,
    `deprecated_periodApr-Mar` DOUBLE NULL DEFAULT NULL,
    `deprecated_periodOct-Sept` DOUBLE NULL DEFAULT NULL,
    `deprecated_UnfinancialDate` VARCHAR(255) NULL DEFAULT NULL,
    `pub_location` VARCHAR(255) NULL DEFAULT NULL,
    `Address` VARCHAR(255) NULL DEFAULT NULL COMMENT 'Address',
    `deprecated_AuditorName` VARCHAR(255) NULL DEFAULT NULL COMMENT 'use pub_auditorid instead. ',
    `deprecated_AuditorEmail` VARCHAR(255) NULL DEFAULT NULL COMMENT 'use pub_auditorid instead. ',
    `pub_auditflag` VARCHAR(45) NULL DEFAULT NULL,
    `pub_datemodified` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `pub_website` VARCHAR(255) NULL DEFAULT NULL,
    `pub_mastheadurl` VARCHAR(255) NULL DEFAULT NULL,
    `pub_frequencyid` INT(11) NULL DEFAULT NULL,
    `pub_nimparentpubid` INT(11) NULL DEFAULT NULL,
    `pub_active` TINYINT(4) NULL DEFAULT NULL,
    `remove_datemodified` TIMESTAMP NULL DEFAULT NULL,
    `pub_datecreated` TIMESTAMP NULL DEFAULT NULL,
    `pub_dayspublished` SET('mon','tue','wed','thu','fri','sat','sun') NULL DEFAULT NULL,
    `pub_state` VARCHAR(10) NULL DEFAULT NULL,
    `pub_contact_vote` INT(10) NULL DEFAULT NULL,
    `pub_contact_auditletter1` INT(10) NULL DEFAULT NULL,
    `pub_contact_auditletter2` INT(10) NULL DEFAULT NULL,
    `pub_auditorid` INT(10) NULL DEFAULT NULL COMMENT 'Put the user id of the auditor in this field for ABC elodgement. (see sc_module_users user_id, listed in the module > users page in edata backend)',
    `pub_next_audit_period` INT(10) NULL DEFAULT NULL,
    `pub_next_audit_type` INT(10) NULL DEFAULT NULL,
    PRIMARY KEY (`pubid`),
    INDEX `Index_2` (`pub_title`),
    INDEX `Unfinancial` (`pub_unfinancial`),
    INDEX `lPublicationType` (`pub_type`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=20000

Члены (м) таблица

CREATE TABLE `Members` (
    `MemID` INT(11) NOT NULL AUTO_INCREMENT,
    `ABC` INT(11) NOT NULL,
    `Mem_Type_ID` SMALLINT(6) NOT NULL,
    `Membership Status` VARCHAR(80) NULL DEFAULT NULL,
    `reference` VARCHAR(255) NULL DEFAULT NULL,
    `CABReference` VARCHAR(50) NULL DEFAULT NULL,
    `Company_Name` VARCHAR(255) NOT NULL,
    `Street_Address` VARCHAR(255) NULL DEFAULT NULL,
    `Street_Address_Line2` VARCHAR(100) NULL DEFAULT NULL,
    `Suburb` VARCHAR(255) NULL DEFAULT NULL,
    `State` VARCHAR(255) NULL DEFAULT NULL,
    `Post_Code` VARCHAR(255) NULL DEFAULT NULL,
    `unfinancial` TINYINT(1) NULL DEFAULT NULL,
    `file` VARCHAR(255) NULL DEFAULT NULL,
    `Phone` VARCHAR(255) NULL DEFAULT NULL,
    `Fax` VARCHAR(255) NULL DEFAULT NULL,
    `WebsiteAddress` VARCHAR(70) NULL DEFAULT NULL,
    `TempAddress` VARCHAR(255) NULL DEFAULT NULL,
    `ABCWebsitePassword` VARCHAR(10) NULL DEFAULT NULL,
    `ABCWebsiteUsername` VARCHAR(10) NULL DEFAULT NULL,
    `CABWebsiteUsername` VARCHAR(10) NULL DEFAULT NULL,
    `CABWebsitePassword` VARCHAR(10) NULL DEFAULT NULL,
    `MembershipAmount` DOUBLE NULL DEFAULT NULL,
    `MYOBExport` TINYINT(1) NULL DEFAULT NULL,
    `MYOBTaxCode` VARCHAR(3) NULL DEFAULT NULL,
    `Date_Last_Payment` VARCHAR(40) NULL DEFAULT NULL,
    `Date_Admitted` VARCHAR(40) NULL DEFAULT NULL,
    `Date_Resigned` VARCHAR(40) NULL DEFAULT NULL,
    `masthead_url` VARCHAR(255) NULL DEFAULT NULL,
    `masthead_report` TINYINT(1) NULL DEFAULT '0',
    `masthead_image` VARCHAR(255) NULL DEFAULT NULL,
    `masthead_description` TEXT NULL,
    `masthead_title` VARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY (`MemID`),
    INDEX `MemID` (`MemID`)
)
COLLATE='latin1_swedish_ci'
ENGINE=MyISAM
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=12349

Что касается других таблиц, они довольно неактуальны, хотя рады опубликовать их, если считаете, что они актуальны, просто прокомментируйте их.

Спасибо, ребята, вот последний результат запроса объяснения alt text

И краткое резюме 1. Добавлены индексы для всех внешних ключей и добавлены первичные ключи для таблиц публикаций и типов аудита (это просто таблицы поиска) 2. Добавлены индексы для сортировки для таблиц public_publications и publishing_audit

это значительно сократило время запроса, но оно все еще выполняется примерно за 0,4 секунды, и в общей сложности всего около 4300 строк.

Любой ваш совет будет принят с благодарностью!


25/08/2010 Обновление

Привет, ребята, после некоторой дополнительной отладки, я понимаю, что, если я удалю всю болтовню из моего предложения select, запрос выполняется довольно быстро.Теперь мне интересно, есть ли в моем предложении select что-то, что заставляет его работать так медленно.

Может ли кто-нибудь указать на некоторую медлительность этого запроса выбора:

 `p`.`pub_memid` AS `pub_memid`,
   `a`.`audit_inexcess` AS `audit_inexcess`,
   `a`.`auditid` AS `auditid`,
   `a`.`audit_period` AS `audit_period`,
   year(`a`.`audit_periodenddate`) AS `audit_year`,
   `p`.`pub_unfinancial` AS `pub_unfinancial`,
   `p`.`pub_title` AS `pub_title`,
   concat(`p`.`pub_title`,_latin1'{%}',`p`.`pubid`) AS `pub_title@display`,
   `p`.`pubid` AS `pubid`,
   `a`.`audit_periodstartdate` AS `audit_periodstartdate`,
   date_format(`a`.`audit_periodstartdate`,_latin1'%b %y') AS `audit_periodstartdate@display`,
   `a`.`audit_periodenddate` AS `audit_periodenddate`,
   date_format(`a`.`audit_periodenddate`,_latin1'%b %y') AS `audit_periodenddate@display`,
   `a`.`audit_type` AS `audit_type`,
   `auau7859_aba`.`ed_abc_audittypes`.`audittype_title` AS `audittype_title`,
   `p`.`pub_state` AS `pub_state`,
   `p`.`pub_location` AS `pub_location`,
   `p`.`pub_dayspublished` AS `pub_dayspublished`,
   `auau7859_aba`.`ed_aba_frequencies`.`frequency_title` AS `frequency_title`,
   `a`.`audit_issues` AS `audit_issues`,
   `a`.`audit_issuesaudited` AS `audit_issuesaudited`,
   if(((`a`.`audit_exclusions` <> 0) or (`a`.`audit_bumperissues` <> 0)),concat(_utf8'*',`a`.`audit_issuesaudited`),`a`.`audit_issuesaudited`) AS `audit_issuesaudited@display`,
   `a`.`audit_coverprice` AS `audit_coverprice`,
   concat(_utf8'$',`a`.`audit_coverprice`) AS `audit_coverprice@display`,
   `a`.`audit_coverpriceday` AS `audit_coverpriceday`,
   date_format(`a`.`audit_periodenddate`,_latin1'%b %y') AS `period_ending`,
   `a`.`audit_remarks` AS `audit_remarks`,
   `p`.`pub_type` AS `pub_type`,
   `auau7859_aba`.`ed_abc_publicationtypes`.`publicationtype_title` AS `publicationtype_title`,
   `a`.`audit_anps` AS `audit_anps`,
   if(`a`.`audit_inexcess`,concat(_utf8'+',format(`a`.`audit_anps`,0)),format(`a`.`audit_anps`,0)) AS `audit_anps@display`,
   if((`a`.`audit_inclaccomairlinesales` > 0),concat(format((`a`.`audit_inclaccomairlinesales` * 100),2),_utf8'%'),_utf8'') AS `audit_inclaccomairlinesales@display`,
   if((`a`.`audit_incleducationalsales` > 0),concat(format((`a`.`audit_incleducationalsales` * 100),2),_utf8'%'),_utf8'') AS `audit_incleducationalsales@display`,
   if((`a`.`audit_incleventsales` > 0),concat(format((`a`.`audit_incleventsales` * 100),2),_utf8'%'),_utf8'') AS `audit_incleventsales@display`,
   if((`a`.`audit_inclmultiplepublicationsales` > 0),concat(format((`a`.`audit_inclmultiplepublicationsales` * 100),2),_utf8'%'),_utf8'') AS `audit_inclmultiplepublicationsales@display`,
   if((`a`.`audit_bundledsales` > 0),concat(format((`a`.`audit_bundledsales` * 100),2),_utf8'%'),_utf8'') AS `audit_bundledsales@display`,
   if((`a`.`audit_nznps` > 0),format(`a`.`audit_nznps`,0),_utf8'') AS `audit_nznps@display`,
   if((`a`.`audit_othercountries` > 0),format(`a`.`audit_othercountries`,0),_utf8'') AS `audit_othercountries@display`,
   if((`a`.`audit_exclaustraliaother` > 0),format(`a`.`audit_exclaustraliaother`,0),_utf8'') AS `audit_exclaustraliaother@display`,
   `a`.`audit_inclaccomairlinesales` AS `audit_inclaccomairlinesales`,
   `a`.`audit_incleducationalsales` AS `audit_incleducationalsales`,
   `a`.`audit_incleventsales` AS `audit_incleventsales`,
   `a`.`audit_inclmultiplepublicationsales` AS `audit_inclmultiplepublicationsales`,
   `a`.`audit_bundledsales` AS `audit_bundledsales`,
   `a`.`audit_nznps` AS `audit_nznps`,
   `a`.`audit_othercountries` AS `audit_othercountries`,
   `a`.`audit_exclaustraliaother` AS `audit_exclaustraliaother`,
   `p`.`pub_mastheadurl` AS `pub_mastheadurl`,
   `a`.`auditid` AS `audit_mastheadlink`,
   concat(ifnull(`a`.`audit_bumperissuedates`,_latin1''),_latin1'{%}',ifnull(`a`.`audit_excludeddates`,_latin1''),_latin1'{%}',ifnull(`a`.`audit_remarks`,_latin1'')) AS `audit_remarks@display`,
   if((ifnull(`a`.`audit_specialpublishingday`,_latin1'') <> _latin1''),concat(ifnull(`p`.`pub_dayspublished`,_latin1''),_latin1'{%}',ifnull(`a`.`audit_specialpublishingday`,_latin1'')),`p`.`pub_dayspublished`) AS `pub_dayspublished@display`,
   `a`.`audit_parentpublication` AS `audit_parentpublication`,
   if((ifnull(`p`.`pub_nimparentpubid`,0) > 0),(select `nimpub`.`pub_title` AS `pub_title` from `auau7859_aba`.`public_publications` `nimpub` where (`nimpub`.`pubid` = `p`.`pub_nimparentpubid`)),_latin1'') AS `audit_parentpublication@display`,
   `a`.`audit_digital_anps` AS `audit_digital_anps`,
   if((`a`.`audit_digital_anps` > 0),format(`a`.`audit_digital_anps`,0),_utf8'') AS `audit_digital_anps@display`,
   `a`.`audit_digital_bumperissuedates` AS `audit_digital_bumperissuedates`,
   `a`.`audit_digital_bumperissues` AS `audit_digital_bumperissues`,
   `a`.`audit_digital_bumperissueslinked` AS `audit_digital_bumperissueslinked`,
   `a`.`audit_digital_coverprice` AS `audit_digital_coverprice`,
   concat(_utf8'$',`a`.`audit_digital_coverprice`) AS `audit_digital_coverprice@display`,
   `a`.`audit_digital_coverprice2` AS `audit_digital_coverprice2`,
   `a`.`audit_digital_coverprice2day` AS `audit_digital_coverprice2day`,
   `a`.`audit_digital_coverprice3` AS `audit_digital_coverprice3`,
   `a`.`audit_digital_coverprice3day` AS `audit_digital_coverprice3day`,
   `a`.`audit_digital_coverprice4` AS `audit_digital_coverprice4`,
   `a`.`audit_digital_coverprice4day` AS `audit_digital_coverprice4day`,
   `a`.`audit_digital_coverpriceday` AS `audit_digital_coverpriceday`,
   `a`.`audit_digital_excludeddates` AS `audit_digital_excludeddates`,
   `a`.`audit_digital_inclaccomairlinesales` AS `audit_digital_inclaccomairlinesales`,
   if((`a`.`audit_digital_inclaccomairlinesales` > 0),concat(format(`a`.`audit_digital_inclaccomairlinesales`,2),_utf8'%'),_utf8'') AS `audit_digital_inclaccomairlinesales@display`,
   `a`.`audit_digital_incleducationalsales` AS `audit_digital_incleducationalsales`,
   if((`a`.`audit_digital_incleducationalsales` > 0),concat(format(`a`.`audit_digital_incleducationalsales`,2),_utf8'%'),_utf8'') AS `audit_digital_incleducationalsales@display`,
   `a`.`audit_digital_incleventsales` AS `audit_digital_incleventsales`,
   if((`a`.`audit_digital_incleventsales` > 0),concat(format(`a`.`audit_digital_incleventsales`,2),_utf8'%'),_utf8'') AS `audit_digital_incleventsales@display`,
   `a`.`audit_digital_inclmultiplepublicationsales` AS `audit_digital_inclmultiplepublicationsales`,
   if((`a`.`audit_digital_inclmultiplepublicationsales` > 0),concat(format(`a`.`audit_digital_inclmultiplepublicationsales`,0),_utf8'%'),_utf8'') AS `audit_digital_inclmultiplepublicationsales@display`,
   `a`.`audit_digital_bundledsalesdigital` AS `audit_digital_bundledsalesdigital`,
   if((`a`.`audit_digital_bundledsalesdigital` > 0),concat(format(`a`.`audit_digital_bundledsalesdigital`,2),_utf8'%'),_utf8'') AS `audit_digital_bundledsalesdigital@display`,
   `a`.`audit_digital_issues` AS `audit_digital_issues`,
   `a`.`audit_digital_issuesaudited` AS `audit_digital_issuesaudited`,
   if(((ifnull(`a`.`audit_digital_excludeddates`,_latin1'') <> _latin1'') or (`a`.`audit_digital_bumperissues` <> 0)),concat(_utf8'*',`a`.`audit_digital_issuesaudited`),`a`.`audit_digital_issuesaudited`) AS `audit_digital_issuesaudited@display`,
   `a`.`audit_digital_nonpublishingdates` AS `audit_digital_nonpublishingdates`,
   `a`.`audit_digital_remarks` AS `audit_digital_remarks`,
   concat(ifnull(`a`.`audit_digital_bumperissuedates`,_latin1''),_latin1'{%}',ifnull(`a`.`audit_digital_excludeddates`,_latin1''),_latin1'{%}',ifnull(`a`.`audit_digital_remarks`,_latin1'')) AS `audit_digital_remarks@display`,
   `m`.`Company_Name` AS `publisher`,
   `auau7859_aba`.`ed_abc_publicationtypes`.`publicationtype_abbreviation` AS `publicationtype_abbreviation`

Ответы [ 4 ]

1 голос
/ 19 августа 2010

Более подробный вопрос ...

Из того, что я читаю в запросе, вы делаете все левые объединения ... тем самым указывая все записи из левой боковой таблицы, независимо от того, есть лисовпадение в таблице справа на основе его соединения.В этом случае самое внутреннее из ...

ed_abc_publication_audits left-joined to public_publications

все же ваше предложение where определяет значение на ОБАХ сторонах через

(a.audit_active = 1) and (p.pub_unfinancial = 0)

Для меня это означало бы ВНУТРЕННЕЕ СОЕДИНЕНИЕгде запись ДОЛЖНА существовать на каждой стороне ...

Затем вы делаете ЛЕВЫЕ СОЕДИНЕНИЯ к auau7859_aba.ed_aba_frequencies, ed_abc_publicationtypes, ed_abc_audittypes и Members ....

Ожидаете ли вы не совпаденияэти объединения более глубокого уровня и, таким образом, ожидают значения NULL, или это то, что вам нужно, когда они ВСЕ в конечном итоге объединяются на всех уровнях.

ОДНАКО, похоже, что левые объединения с другими таблицами являются скорее поиском /справочная таблица, в которой запись ВСЕГДА должна существовать. Например,

Каждый аудит публикации ВСЕГДА будет иметь действительный «Тип аудита»

Каждая публикация ВСЕГДА будет иметь «Идентификатор частоты», «ТипПубликация "и" Пользователь "

Это правильно в моей интерпретации ???Таблицы поиска ВСЕГДА будут иметь соответствующую запись?Если да, то какие ... если не обязательно, какие ...

На основании ваших ответов попробуйте следующий запрос ... STRAIGHT_JOIN может быть мощным, если вы знаете свои данные, отношения и можете оптимизировать своисобственная таблица ключей, управляющая остальной частью системы ...

SELECT STRAIGHT_JOIN
        a.*,
        p.*
    FROM 
        auau7859_aba.ed_abc_publication_audits a
            left join auau7859_aba.ed_abc_audittypes atypes
                ON a.audit_type = atypes.audittypeid,
        auau7859_aba.public_publications p 
            left join auau7859_aba.ed_aba_frequencies f
                ON p.pub_frequencyid = f.frequencyid
            left join auau7859_aba.ed_abc_publicationtypes t
                ON p.pub_type = t.publicationtypeid
            left join auau7859_aba.Members m 
                on p.pub_memid = m.MemID
    where 
            a.audit_pubid = p.pubid
        and a.Audit_Active = 1
        and p.pub_unfinancial = 0
0 голосов
/ 04 сентября 2010

Чтобы получить значение для audit_parentpublication@display, он выполняет запрос к auau7859_aba.public_publications для каждой строки.

Попробуйте вместо этого изменить основной запрос на внешнее объединение auau7859_aba.public_publications.

0 голосов
/ 22 августа 2010

Если вы хотите избежать сортировки файлов, поместите поля в вашем ORDER BY в индекс, который вы можете использовать.

В вашем случае a.audit_anps недоступен в индексе, поэтому начинается сортировка файлов. Поместите индекс в (pubid, audit_anps), и он будет делать то, что вы хотите.

Будьте внимательны при добавлении индексов; каждый индекс нужно будет обновлять при каждой записи, так что простое перебрасывание индексов может привести к прекрасным EXPLAIN, но к ужасной производительности приложения. Помните: EXPLAIN только говорит вам, что оптимизатор делает с вашим запросом и заданным набором таблиц и индексов. Это может помочь вам добиться хорошей производительности приложения, но приятное на вид ОБЪЯСНЕНИЕ не является вашей реальной целью.

0 голосов
/ 19 августа 2010

Сортировка и выборка такого количества записей не должны быть проблемой для MySQL.Как я вижу из вашего экрана печати, не все таблицы имеют индексы.Создайте индекс для каждого поля, связанного с операторами JOIN или WHERE.И общая производительность должна увеличиться.

...