В запросе ниже выполняются запросы, которые клиент сделал раньше, и получают правильные результаты. В любом случае, запрос должен быть как можно быстрее. Во время тестирования я понял, где предложение замедляет запрос. Хок можно решить эту проблему?Где предложение замедляет запрос
SELECT
customerselections.customer_id,
customerselections.selectedcompany_id,
companycampaigns.*,
companies.company_logo
FROM customerselections
INNER JOIN companycampaigns ON companycampaigns.company_id=customerselections.selectedcompany_id
INNER JOIN companies ON companies.company_id=customerselections.selectedcompany_id
WHERE customerselections.customer_id='$customerid' LIMIT $offset,$limit
UPDATE: объяснить результаты
отборы клиентов:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE customerselections ALL NULL NULL NULL NULL 12799999
companycampaigns
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE companycampaigns ALL NULL NULL NULL NULL 2000000
Компании
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE companies ALL NULL NULL NULL NULL 2039500
QUERY EXPLAIN
|id|select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
|1|SIMPLE | customerselections | ref | selectedcompany_id,customer_id | customer_id | 4 | const | 2 9 | |
|1|SIMPLE| companycampaigns | ref | company_id | company_id | 4 | viptrio.customerselections.selectedcompany_id | 1 | |
|1|SIMPLE| companies | eq_ref | PRIMARY | PRIMARY | 4 | viptrio.customerselections.selectedcompany_id |1 | |
UPDATE
CREATE TABLE IF NOT EXISTS `companies` (
`company_id` int(11) NOT NULL auto_increment,
`company_customerid` int(11) default NULL,
`company_name` tinytext NOT NULL,
`company_description` tinytext,
`company_email` tinytext NOT NULL,
`company_website` tinytext,
`company_gsm` tinytext,
`company_landline` tinytext,
`company_fax` tinytext,
`company_address` tinytext,
`company_contactperson` tinytext,
`company_businessid` smallint(11) NOT NULL,
`company_cityid` smallint(5) NOT NULL,
`company_countrycode` char(3) NOT NULL,
`company_refnum` tinytext,
`company_regdate` tinytext NOT NULL,
`company_logo` tinytext,
`company_keyword` tinytext,
PRIMARY KEY (`company_id`),
KEY `company_cityid` (`company_cityid`),
KEY `company_countrycode` (`company_countrycode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2039501 ;
CREATE TABLE IF NOT EXISTS `companycampaigns` (
`campaign_id` int(11) NOT NULL auto_increment,
`company_id` int(11) NOT NULL,
`campaign_title` varchar(40) NOT NULL,
`campaign_detail` mediumtext NOT NULL,
`campaign_startdate` tinytext,
`campaign_enddate` tinytext,
`published` tinyint(1) NOT NULL default '0',
PRIMARY KEY (`campaign_id`),
KEY `company_id` (`company_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2000001 ;
CREATE TABLE IF NOT EXISTS `customerselections` (
`selection_id` int(11) NOT NULL auto_increment,
`customer_id` int(11) NOT NULL,
`selectedcompany_id` int(11) NOT NULL,
PRIMARY KEY (`selection_id`),
KEY `selectedcompany_id` (`selectedcompany_id`),
KEY `customer_id` (`customer_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12800006 ;
Он медленный даже без предложения? – DevelopmentIsMyPassion
@ АшРева: намного быстрее. С предложением «where» он занимает около 0,30, без него время запроса составляет около 0,15 – mustafa
. Попробуйте добавить предложение where в первом предложении 'ON'' FROM customerslections INNER JOIN companycampaigns ON customerselections.customer_id = '$ customerid 'AND companycampaigns.company_id = customerselections.selectedcompany_id INNER JOIN компании ON companies.company_id = customerselections.selectedcompany_id LIMIT $ offset, $ limit' Надеюсь, это поможет. – Meherzad