Forum Webscript.Ru

Общие => Базы данных => Тема начата: Антошка от 16 Июня 2004, 18:39:10

Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Антошка от 16 Июня 2004, 18:39:10
Таблица 100000 записей (сто тысяч) следственно примерно так
НОМЕР КАТЕГОРИЯ НАЗВАНИЕ ОПИСАНИЕ

категорий 23 штуки, все в разнобой

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

задача вывести категории и следственно сколько записей в категории

mysql_query("SELECT categor, id, COUNT(categor) FROM `$table` GROUP BY categor");

вот примерно так забираю
время вывода страницы в районе 5-6 минут при этом процесс Mysql душит иные процессы на Free и забирает 80-85% проца на это время.

подумал....
сделал индекс на поле categor, по описалову должно бы все стать очень быстро (особенно если учесть что из 200мб базы, она стала 240мб, тока индексы на 40 метров)
но процесс стал быстрее но все также хренова 3-4 минуты.
У хостера все будет быстрее не сомневаюсь, но так как предполагается достаточно активная нагрузка, то боюсь он это не одобрит  

вопрос чем можно помочь сейчас?
один из вариантов сделать еще табличку туда затащить все категории и по CRON запускать пересчет кол-во записей раз в сутки. Но кроме этого?
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: commander от 16 Июня 2004, 19:04:09
если ты хочешь что-бы тебе поногли... выведи свои таблицы примерно в таком формате... :
create table test
(
test_id int,
test_name varchar(1)
);
А то по твоему прищуренному эссе ничего не понятно... кроме того что ты очень гордишся что у тебя большая БД... хотя не такая она и большая...
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Меняздесьдавнонет от 16 Июня 2004, 19:56:20
во-первых, запрашивать id в таком запросе бесполезно
во-вторых, отлаживать запросы надо в консоли, а не выводя на страницу.
в-третьих, приведи здесь результат вывода вот такого запроса
EXPLAIN SELECT categor, COUNT(categor) FROM имя_таблицы GROUP BY categor
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Антошка от 16 Июня 2004, 20:31:23
Цитировать
commander:
если ты хочешь что-бы тебе поногли... выведи свои таблицы примерно в таком формате... :
create table test
(
test_id int,
test_name varchar(1)
);
А то по твоему прищуренному эссе ничего не понятно... кроме того что ты очень гордишся что у тебя большая БД... хотя не такая она и большая...



Пожалуйста...
CREATE TABLE `tm_books` (
  `id` int(11) NOT NULL default \'0\',
  `categor` varchar(255) binary NOT NULL default \'\',
  `nazvanie` varchar(255) binary NOT NULL default \'\',
  `data` year(4) NOT NULL default \'0000\',
  `cena` decimal(8,2) NOT NULL default \'0.00\',
  `url` varchar(255) NOT NULL default \'\',
  `kratko` text NOT NULL,
  `image` text NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `categor` (`categor`)
) TYPE=MyISAM PACK_KEYS=0;
   

а можно для самообразования, узнать в каком месте у меня фразы гордости что большая база?
база не большая не маленькая.. да действительно есть базы и гиговые, а есть и килобайтные, для большиства база на 200 метров все таки большая...
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Антошка от 16 Июня 2004, 20:45:01
Цитировать
RomikChef:
во-первых, запрашивать id в таком запросе бесполезно


дык, я потом использую его...
правда выкинув его нахрен время запроса сократилось с 33 секунд, до 9....
вот видимо и ответ ;))
без всяких понтов

Цитировать
RomikChef:
во-вторых, отлаживать запросы надо в консоли, а не выводя на страницу.

да я отлаживаю в консоле... просто enn я отладил все что мог, как я думал ;(

Цитировать
RomikChef:
в-третьих, приведи здесь результат вывода вот такого запроса
EXPLAIN SELECT categor, COUNT(categor) FROM имя_таблицы GROUP BY categor


table  type  possible_keys  key  key_len  ref  rows  Extra  
tm_books index NULL categor 255 NULL 78573 Using index
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Макс от 16 Июня 2004, 21:17:22
обычно делают таблицу с категориями :
create Categories (
   cat_id int unsigned not null auto_increment,
   category varchar(32),
   primary key (cat_id)
);

и в  таблице tm_books хранят не название категории а ее cat_id
Тебе вообще знакомо такое понятие как "нормализация" ?
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Макс от 16 Июня 2004, 21:19:40
Зачем тебе в category аж 255 символов ?
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Меняздесьдавнонет от 16 Июня 2004, 21:22:44
Цитировать
Антошка:
дык, я потом использую его...

Видишь ли, милый.
Я не спорю с тем, что ты его используешь.
просто я говорю о том, что использовать его быссмысленно.
с тем же успехом ты можешь просто генерить случайное число

Цитировать

`image` text NOT NULL,

ОХРЕНЕТЬ!
этот ... ... ... изобретатель хранит картинку в базе, а потом удивляется - откуда размеры и тормоза!
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Антошка от 16 Июня 2004, 21:39:30
Цитировать
RomikChef:
ОХРЕНЕТЬ!
этот ... ... ... изобретатель хранит картинку в базе, а потом удивляется - откуда размеры и тормоза!


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

"Крутые

причем ALT может быть до 400 символов...
следственно в VARCHAR ну никак не запихнуть...
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Антошка от 16 Июня 2004, 21:40:41
Цитировать
Макс:
Зачем тебе в category аж 255 символов ?


в принципе 255 не надо... в районе 150 заканчивается имя категории, а что если сделать не 255 а 150 поможет?
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Антошка от 16 Июня 2004, 21:44:52
Цитировать
Макс:
Тебе вообще знакомо такое понятие как "нормализация" ?


Да только к чему это здесь? Вот цитата из БСЭ

Нормализация
(франц. normalisation - упорядочение, от normal - правильный, положенный), вид термической обработки стали, заключающийся в нагреве её выше верхней критической точки, выдержке при этой температуре и последующем охлаждении на спокойном воздухе. Цель Н. - придание металлу однородной мелкозернистой структуры (не достигнутой при предыдущих процессах - литье, ковке или прокатке) и как следствие - повышение его механических свойств (пластичности и ударной вязкости).
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Меняздесьдавнонет от 16 Июня 2004, 21:48:47
поможет:
ограничить все варчар поля нужным размером и сделать их char
все текст поля вынести в отдельную таблицу!
не хранить в базе ОФОРМЛЕНИЕ, а хранить ТЕКСТЫ
я не удивлюсь, что альт из имижда копирует содержимое поля кратко.
альт сократить максимум символов до 50.
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Макс от 16 Июня 2004, 22:19:03
Цитировать
Антошка:
Да только к чему это здесь? Вот цитата из БСЭ

ты бы еще словарь Даля открыл :)

Цитировать
Антошка:
, а что если сделать не 255 а 150 поможет?
если и поможет, то только временно. Правильное решение - нормализовать БД.
Что такое номализация читай у Криса Дейта. Ну или хотя бы в яндексе.
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Антошка от 16 Июня 2004, 22:51:20
Цитировать
RomikChef:
поможет:
ограничить все варчар поля нужным размером и сделать их char
все текст поля вынести в отдельную таблицу!
не хранить в базе ОФОРМЛЕНИЕ, а хранить ТЕКСТЫ
я не удивлюсь, что альт из имижда копирует содержимое поля кратко.
альт сократить максимум символов до 50.


если бы было все так просто, то естественно не хранил-бы и даже не спрашивал...
и альт и место где лежит картинка легли бы в разные поля... и стали-бы на порядок короче, только так отдает партнер и лично под нас менять он ничего не намерен...
Название: По MySQL вопрос (тормоза, структура базы)
Отправлено: Антошка от 17 Июня 2004, 01:20:58
Спасибо всем, последовал разным рекомендациям...

1. Убрал id из запроса время запроса упало с 33 сек до 11-9 сек
2. Переменная Varchar(255), сменилась на char(100) с 11 секунд, до 0,5 сек.

Что уже более чем хорошо.