Автор Тема: По MySQL вопрос (тормоза, структура базы)  (Прочитано 6020 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Антошка

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 56
  • +0/-0
  • 0
    • Просмотр профиля
Таблица 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 запускать пересчет кол-во записей раз в сутки. Но кроме этого?

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
По MySQL вопрос (тормоза, структура базы)
« Ответ #1 : 16 Июня 2004, 19:04:09 »
если ты хочешь что-бы тебе поногли... выведи свои таблицы примерно в таком формате... :
create table test
(
test_id int,
test_name varchar(1)
);
А то по твоему прищуренному эссе ничего не понятно... кроме того что ты очень гордишся что у тебя большая БД... хотя не такая она и большая...
And no religion too...

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
По MySQL вопрос (тормоза, структура базы)
« Ответ #2 : 16 Июня 2004, 19:56:20 »
во-первых, запрашивать id в таком запросе бесполезно
во-вторых, отлаживать запросы надо в консоли, а не выводя на страницу.
в-третьих, приведи здесь результат вывода вот такого запроса
EXPLAIN SELECT categor, COUNT(categor) FROM имя_таблицы GROUP BY categor

Оффлайн Антошка

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 56
  • +0/-0
  • 0
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #3 : 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 метров все таки большая...

Оффлайн Антошка

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 56
  • +0/-0
  • 0
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #4 : 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

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #5 : 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
Тебе вообще знакомо такое понятие как "нормализация" ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #6 : 16 Июня 2004, 21:19:40 »
Зачем тебе в category аж 255 символов ?
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
По MySQL вопрос (тормоза, структура базы)
« Ответ #7 : 16 Июня 2004, 21:22:44 »
Цитировать
Антошка:
дык, я потом использую его...

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

Цитировать

`image` text NOT NULL,

ОХРЕНЕТЬ!
этот ... ... ... изобретатель хранит картинку в базе, а потом удивляется - откуда размеры и тормоза!

Оффлайн Антошка

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 56
  • +0/-0
  • 0
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #8 : 16 Июня 2004, 21:39:30 »
Цитировать
RomikChef:
ОХРЕНЕТЬ!
этот ... ... ... изобретатель хранит картинку в базе, а потом удивляется - откуда размеры и тормоза!


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

http://covers.allshops.ru/e/ed/edv/edvd0002.gif" border=0 name="myImage" width="72" height="107" alt="Крутые перцы Юн Микаэль, Десанья Венсан">

причем ALT может быть до 400 символов...
следственно в VARCHAR ну никак не запихнуть...
« Последнее редактирование: 16 Июня 2004, 21:47:58 от Антошка »

Оффлайн Антошка

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 56
  • +0/-0
  • 0
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #9 : 16 Июня 2004, 21:40:41 »
Цитировать
Макс:
Зачем тебе в category аж 255 символов ?


в принципе 255 не надо... в районе 150 заканчивается имя категории, а что если сделать не 255 а 150 поможет?

Оффлайн Антошка

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 56
  • +0/-0
  • 0
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #10 : 16 Июня 2004, 21:44:52 »
Цитировать
Макс:
Тебе вообще знакомо такое понятие как "нормализация" ?


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

Нормализация
(франц. normalisation - упорядочение, от normal - правильный, положенный), вид термической обработки стали, заключающийся в нагреве её выше верхней критической точки, выдержке при этой температуре и последующем охлаждении на спокойном воздухе. Цель Н. - придание металлу однородной мелкозернистой структуры (не достигнутой при предыдущих процессах - литье, ковке или прокатке) и как следствие - повышение его механических свойств (пластичности и ударной вязкости).

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
По MySQL вопрос (тормоза, структура базы)
« Ответ #11 : 16 Июня 2004, 21:48:47 »
поможет:
ограничить все варчар поля нужным размером и сделать их char
все текст поля вынести в отдельную таблицу!
не хранить в базе ОФОРМЛЕНИЕ, а хранить ТЕКСТЫ
я не удивлюсь, что альт из имижда копирует содержимое поля кратко.
альт сократить максимум символов до 50.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #12 : 16 Июня 2004, 22:19:03 »
Цитировать
Антошка:
Да только к чему это здесь? Вот цитата из БСЭ

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

Цитировать
Антошка:
, а что если сделать не 255 а 150 поможет?
если и поможет, то только временно. Правильное решение - нормализовать БД.
Что такое номализация читай у Криса Дейта. Ну или хотя бы в яндексе.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Антошка

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 56
  • +0/-0
  • 0
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #13 : 16 Июня 2004, 22:51:20 »
Цитировать
RomikChef:
поможет:
ограничить все варчар поля нужным размером и сделать их char
все текст поля вынести в отдельную таблицу!
не хранить в базе ОФОРМЛЕНИЕ, а хранить ТЕКСТЫ
я не удивлюсь, что альт из имижда копирует содержимое поля кратко.
альт сократить максимум символов до 50.


если бы было все так просто, то естественно не хранил-бы и даже не спрашивал...
и альт и место где лежит картинка легли бы в разные поля... и стали-бы на порядок короче, только так отдает партнер и лично под нас менять он ничего не намерен...

Оффлайн Антошка

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 56
  • +0/-0
  • 0
    • Просмотр профиля
По MySQL вопрос (тормоза, структура базы)
« Ответ #14 : 17 Июня 2004, 01:20:58 »
Спасибо всем, последовал разным рекомендациям...

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

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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28