Mysql Оптимизация базы данных и запроса...

  • Автор темы SerVik1980
  • Дата начала

SerVik1980

Guest
Добрый день есть 2 таблицы в одной порядка 150 000 записей в другой порядка 1500 записей есть запрос на объединение данных в данной таблицы, при небольшом количестве данных работал вполне нормально, но потом начал тормозить может кто нибудь подскажет как немного ускорить работу запроса, может немного изменить что то в таблицах заранее спасибо!

Запрос:
SELECT `r_id`,
SUM(IF(`bb_r`=`r_id`, 1, 0)) AS `count`,
SUM(IF(`bb_r2`=`r_id`, 1, 0)) AS `count2`
FROM `tmp_regions` AS r
LEFT JOIN `tmp_billboards` AS `e` ON (`r`.`r_id` = `e`.`bb_r` OR `r`.`r_id` = `e`.`bb_r2`)
AND `e`.`bb_deleted` = 0 AND `bb_x`!=0 AND `bb_y`!=0 GROUP BY `r`.`r_id` ORDER BY `r`.`r_capital` DESC, `r`.`r_other`, `r`.`r_name`

таблица 1:

CREATE TABLE IF NOT EXISTS `tmp_billboards` (
`bb_id` int(11) NOT NULL AUTO_INCREMENT,
`bb_r` int(11) unsigned NOT NULL,
`bb_r2` int(11) unsigned NOT NULL DEFAULT '0' ,
`bb_deleted` tinyint(1) unsigned NOT NULL ,
`bb_x` decimal(17,14) NOT NULL,
`bb_y` decimal(17,14) NOT NULL,
PRIMARY KEY (`bb_id`),
UNIQUE KEY `bb_id` (`bb_id`),
KEY `bb_r` (`bb_r`),
KEY `bb_deleted` (`bb_deleted`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=202 AUTO_INCREMENT=1736752 ;

таблица2:

CREATE TABLE IF NOT EXISTS `tmp_regions` (
`r_id` int(11) NOT NULL AUTO_INCREMENT,
`r_name` varchar(255) NOT NULL,
`r_order` int(11) NOT NULL DEFAULT '0',
`r_capital` tinyint(3) unsigned NOT NULL ,
`r_other` tinyint(3) unsigned NOT NULL ,
PRIMARY KEY (`r_id`),

KEY `r_capital` (`r_capital`),
KEY `r_other` (`r_other`)
 

Gas

может по одной?
покажи результат запроса
PHP:
select count(*),sum(bb_deleted=0),sum(bb_x!=0),sum(bb_y!=0) from tmp_billboards;
допустимы ли проверки bb_x>0 и bb_y>0 вместо неравно или там могут быть и отрицательные значения?

UNIQUE KEY `bb_id` (`bb_id`)
лишнее, у тебя и так поле primary key auto_increment

индекс на bb_r2 конечно must have
 
Сверху