120000 записей, база дохнет, SOS

Ekklipce

Новичок
120000 записей, база дохнет, SOS

120000 записей, н алокалке под винду, боюсь р хостинрге дае думать, база просто дохнет..

структура самых тяжелых таблиц, в остальных почти пусто по сравнению с этими двумя

PHP:
CREATE TABLE `element` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(50) NOT NULL default '',
  `producer` varchar(150) NOT NULL default '0',
  `cat` int(11) default NULL,
  `params` mediumtext NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM COMMENT='Электронные элементы' AUTO_INCREMENT=34424 ;

-- --------------------------------------------------------

-- 
-- Структура таблицы `offer`
-- 

CREATE TABLE `offer` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `element` int(11) NOT NULL default '0',
  `min_count` varchar(5) NOT NULL default '',
  `store_count` varchar(5) NOT NULL default '',
  `supplier` int(11) NOT NULL default '0',
  `period` varchar(100) NOT NULL default '',
  `price` varchar(10) NOT NULL default '',
  `name` varchar(150) default NULL,
  `producer` varchar(150) default NULL,
  PRIMARY KEY  (`id`),
  KEY `id` (`id`,`period`,`price`,`name`,`producer`)
) TYPE=MyISAM COMMENT='Привязка' AUTO_INCREMENT=120000 ;
и запрос..есть подозрения что можно сделать лучше или оптимизированние.. только как..
запрос логически подстроен под потребности выборки т дальнейшей обработки данных

PHP:
SELECT IF (
ISNULL(offer.id), CONCAT( 'e', element.id ) , offer.id) AS id, 
IF (LENGTH( offer.name ) >0, offer.name, element.name) AS name, 
IF (ISNULL(offer.producer), element.producer, offer.producer) AS producer, 
element.params AS params, offer.price AS price, supplier.min_offer AS min_offer, offer.store_count AS store, offer.period AS period, offer.min_count AS min_package
FROM element, cat
LEFT JOIN offer ON ( element.id = offer.element ) 
LEFT JOIN supplier ON ( supplier.id = offer.supplier ) 
WHERE element.cat = cat.id
ORDER BY producer, name ASC 
LIMIT 0 , 50
 

Ekklipce

Новичок
уже сделал..

этот же explain подсказал поменять местами в запросе таблицы offer и element.. производительность выросла как на дрожжах..

надеюсь это мой последний пост в данной теме
 

Rashkin

Новичок
по моему таблицы надо оптимизировать.
отдельная таблица Producer - по моему не плохое начало

еще типы данных price - varchar??? почему.

min_count тоже вопрос.

period - тожи вопрос

может также попробывать привести какие то данные к типу SET??

и селект странноват. есть над чем покумекать

и последние. в таблице комментарий 'привязка'. если это связь многое ко многим то нужно просто отдельную таблицу с полями 'id связь' 'id элемент' 'id оffer' ну в общим люди.

-~{}~ 02.09.05 01:22:

в данном случае больше диаграммы помогают
 

Ekklipce

Новичок
отдельная таблица Producer - по моему не плохое начало
>>> у вас со зрением может плохо, но таблицы этой там нет

еще типы данных price - varchar??? почему.
>>> в прайсах цены иногда с запятой вместо точки, хотя.. и на пхп может это исправить.. если это сильно увеличит производительность, изменю..

period - тожи вопрос
>>> это текст

может также попробывать привести какие то данные к типу SET??
>>> бред... там нет не одного столба где бы что то вот так вот повторялось, ака СЕТ, как ЭНУМ

и селект странноват. есть над чем покумекать
>>> хиба шо тремя условиями, но напрямую рапрос работает и неплохо..в сайте чуть медленнее, но разберусь в чем дело

и последние. в таблице комментарий 'привязка'. если это связь многое ко многим то нужно просто отдельную таблицу с полями 'id связь' 'id элемент' 'id оffer' ну в общим люди.
>>> врядли.. получаеться есть элементы, ес некие абстрактные условия продажи чего-то..и потом связка этих условий с элементами ?.. смешно..
 

Rashkin

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

на счет типов данных решайте сами. в конце концов есть советы по оптимизации типов данных

объясните бизнес логику селекта пожалуста и посмеемся вместе

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

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

chira

Новичок
Ekklipce
создай индексы для полей связи (REFERENCES)
для приведённых таблиц:
CREATE INDEX cat ON element (cat);
CREATE INDEX element ON offer(element);
CREATE INDEX supplier ON offer(supplier);
 
Сверху