|
|
|
| появились проблемы с нагрузкой сайта, предполагаю что это из-за базы данных, решил может оптимизировать как-то, ниже приведена таблица разделов
"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";}
|
проблем с нагрузкой не возникало, вот теперь думаю может обратно вернутся к той же схеме или же у меня таблица не оптимизирована, подскажите что лучше сделать, и если можно покажите как проставит индексы и на какие поля, может нагрузка уменьшится. | |
|
|
|
|
|
|
|
для: web777
(10.07.2009 в 14:11)
| | Определите для начала сколько времени выполняется запрос к БД ($db->q(...)), сколько - выкачивание результатов запроса ( while($row = $db->mysql_assoc($sqlTree)) ... ), и сколько - само построение кода.
Сомневаюсь, что первые два шага будут занимать изрядное время.
Третий же не относится к БД вообще никак.
Скорость исполнения запроса (1 шаг) можно увеличить, создав индекс на поле сортировки, если его еще нет.
[horisontal scrolling ЛАП on] | |
|
|
|
|
|
|
|
для: Trianon
(10.07.2009 в 16:36)
| | спасибо, попробую сделать, результаты если что выложу тут | |
|
|
|