Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день. По какой- то причине такой запрос работает:
SELECT `sellers`.id, `sellers`.name, `sellers`.city, count(`prices`.seller_id) as c1
FROM `sellers`, `prices`
WHERE `sellers`.id= `prices`.seller_id group by `sellers`.id
А такой нет:
SELECT `sellers`.id, `sellers`.name, `sellers`.city, count(`prices`.seller_id) as c1,
count(`import_report`.seller_id) as c2
FROM `sellers`, `prices`, `import_report`
WHERE `sellers`.id= `prices`.seller_id AND `sellers`.id= `import_report`.seller_id group by `sellers`.id
Никаких ошибок не выводится, mysql просто зависает
Неактивен
Подозреваю, что не хватает ключей на тех полях, по которым проводится соединение.
Неактивен
ключи есть, или может такие запросы надо писать через inner join, или как то иначе?
Неактивен
Можно через join, можно и так, как Вы составили запрос. Покажите explain запроса и show create table на все таблицы. К слову, сколько в каждой из таблиц записей?
Неактивен
CREATE TABLE `sellers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`url` varchar(128) NOT NULL,
`products` varchar(128) NOT NULL,
`status` varchar(32) NOT NULL,
`description` text NOT NULL,
`date` date NOT NULL,
`delivery_time` varchar(128) DEFAULT NULL,
`markup` decimal(5,2) NOT NULL DEFAULT '0.00',
`markup_type` tinyint(1) NOT NULL DEFAULT '0',
`use_for_dealers_prices` enum('Yes','No') NOT NULL DEFAULT 'No',
`city` varchar(128) NOT NULL,
`email` varchar(128) NOT NULL,
`phone` varchar(128) NOT NULL,
`manager` varchar(256) NOT NULL,
`show_on_site` enum('Yes','No') NOT NULL DEFAULT 'No',
`balance` decimal(7,2) NOT NULL,
`delivery_payment` text NOT NULL,
`price_correction` decimal(5,2) NOT NULL COMMENT 'Корректировка цены поставщика',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=778 DEFAULT CHARSET=utf8
CREATE TABLE `prices` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`card_id` varchar(128) DEFAULT NULL,
`seller_id` int(11) NOT NULL,
`price` int(11) NOT NULL,
`source_price` int(11) NOT NULL,
`amount` smallint(6) NOT NULL,
`currency` enum('UAH','USD','EUR') NOT NULL DEFAULT 'UAH',
`source_price_currency` enum('UAH','USD','EUR') NOT NULL DEFAULT 'UAH',
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`pre_order` enum('да','нет') NOT NULL DEFAULT 'нет',
`country` int(11) NOT NULL DEFAULT '0',
`info` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `product_id` (`product_id`),
KEY `seller_id` (`seller_id`),
KEY `card_id` (`card_id`)
) ENGINE=MyISAM AUTO_INCREMENT=104908 DEFAULT CHARSET=utf8
CREATE TABLE `import_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`seller_id` int(11) NOT NULL,
`card` varchar(128) NOT NULL,
`tyre_params` varchar(256) NOT NULL COMMENT 'brand|model|width|profile|r|season|load_rating|speed_rating|country_id',
`status` int(2) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `seller_id` (`seller_id`)
) ENGINE=MyISAM AUTO_INCREMENT=10900 DEFAULT CHARSET=utf8
sellers- 80 , prices- 81000, import_report- 10000 записей
explain SELECT `sellers`.id, `sellers`.name, `sellers`.city, count(`prices`.seller_id) as c1
FROM `sellers`, `prices`
WHERE `sellers`.id= `prices`.seller_id group by `sellers`.id
1 SIMPLE sellers ALL PRIMARY 79 Using temporary; Using filesort
1 SIMPLE prices ref seller_id seller_id 4 www120ua.sellers.id 53 Using index
Отредактированно SanyaGarik (01.11.2011 01:06:44)
Неактивен
Приведите пожалуйста еще explain запроса, который зависает. И посмотрите через show full processlist что с ним происходит - в каком состоянии он находится?
Отредактированно deadka (01.11.2011 01:05:09)
Неактивен
explain SELECT `sellers`.id, `sellers`.name, `sellers`.city, count(`prices`.seller_id) as c1,
count(`import_report`.seller_id) as c2
FROM `sellers`, `prices`, `import_report`
WHERE `sellers`.id= `prices`.seller_id AND `sellers`.id= `import_report`.seller_id group by `sellers`.id
1 SIMPLE import_report index seller_id seller_id 4 10717 Using index; Using temporary; Using filesort
1 SIMPLE sellers eq_ref PRIMARY PRIMARY 4 www120ua.import_report.seller_id 1
1 SIMPLE prices ref seller_id seller_id 4 www120ua.sellers.id 53 Using where; Using index
Неактивен
а вот запустился запрос на компе помощнее, но сильно долго выполняется
2 root localhost:50066 www120ua Sleep 10050
3 root localhost:50905 www120ua Sleep 530
9 root localhost:50962 www120ua Query 0 show full processlist
10 root localhost:50967 www120ua Sleep 555
11 root localhost:50968 www120ua Sleep 530
12 root localhost:51002 www120ua Sleep 263
Можно ли как то оптимизировать запрос, чтобы он быстрее выполнялся? или только разделить на два?
Отредактированно SanyaGarik (01.11.2011 01:15:08)
Неактивен