Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как оптимизировать таблицу разделов по стандартному варианту при parent
 
 автор: web777   (10.07.2009 в 14:11)   письмо автору
 
 

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


"CREATE TABLE `category` (
  `id` int(10) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `alias` varchar(255) NOT NULL default '',
  `count` int(5) NOT NULL default '0',
  `parent` varchar(255) NOT NULL default '',
  `sort` int(5) NOT NULL default '0',
  `pic` varchar(100) NOT NULL default '',
  `description` text,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;"



выбираю так


  $arTree = array();
  $sqlTree = $db->q("SELECT id,parent,alias,name,count,pic FROM category ORDER BY sort asc");
  while($row = $db->mysql_assoc($sqlTree)){
    $arTree[$row['id']] = array ('id'=>$row['id'],'parent'=>$row['parent'],'alias'=>$row['alias'],'name'=>$row['name'],'count'=>$row['count'],'pic'=>$row['pic']);
  }


и передаю в шаблон Смарти


 $smarty->assign('tree', $arTree);


в БД разделов в количестве около 1500 шт. Ветка состоит из одного или двух максимум подразделов не более. При запуске скрипта, время выполнения скрипта большое около 20 секунд, если убираю код выборки разделов из БД, то время меньше секунды. Подскажите где требуется оптимизировать?
Слышал что вроде можно индексы проставить для таблицы, на определённые поля, но на какие и каким образом, или может я неправильно заполняю массив из Бд, и-за чего забивается буфер?

Раньше я делал немного подругому, заранее подготавливал массив разделов делал его сирилизованым(упоковывал) и сохранял его в файле, примерно такого варианта


a:186:{i:2;a:8:{s:2:"id";s:1:"2";s:6:"parent";s:1:"0";s:5:"alias";s:1:"2";s:4:"name";s:5:"Acura";s:5:"ktype";s:1:"1";s:5:"count";s:1:"3";s:3:"pic";s:0:"";s:5:"total";s:1:"6";}


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

  Ответить  
 
 автор: Trianon   (10.07.2009 в 16:36)   письмо автору
 
   для: web777   (10.07.2009 в 14:11)
 

Определите для начала сколько времени выполняется запрос к БД ($db->q(...)), сколько - выкачивание результатов запроса ( while($row = $db->mysql_assoc($sqlTree)) ... ), и сколько - само построение кода.
Сомневаюсь, что первые два шага будут занимать изрядное время.
Третий же не относится к БД вообще никак.

Скорость исполнения запроса (1 шаг) можно увеличить, создав индекс на поле сортировки, если его еще нет.

[horisontal scrolling ЛАП on]

  Ответить  
 
 автор: web777   (13.07.2009 в 09:20)   письмо автору
 
   для: Trianon   (10.07.2009 в 16:36)
 

спасибо, попробую сделать, результаты если что выложу тут

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования