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

Форум MySQL

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

 

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

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

тема: Загруженность сервера после php+mysql запроса
 
 автор: marcus   (22.02.2007 в 13:45)   письмо автору
 
 

Имеется таблица из 4 полей: к примеру name, developer, price, pack. Проиндексирована по name.
В ней хранятся записи по товарам и занимает 500 000 рядов, занимает на винте около 70Mb.

по GET идет запрос с внешнего ресурса на поиск компонента по имени, после чего выполняется скрипт:

//--------------------------------------------------------------------------
//открытие непостоянного соединения с базой (т.е. не pconnect)

$search = trim($_GET['search']);
$res = mysql_query("select * from table where name like '$search%' limit 20") or die (mysql_error());

while($row = mysql_fetch_array($res))
{
манипулируем с данными по их выводу с помощью echo;
}

mysql_free_result($res);
mysql_close();
//--------------------------------------------------------------------------
Так вот запрос выполняется, но после передачи данных сервер БД находится в загруженности, причем очень даже приличной. В коде вроде все нормально. Что может так загружать? Заранее спасибо

   
 
 автор: cheops   (22.02.2007 в 16:21)   письмо автору
 
   для: marcus   (22.02.2007 в 13:45)
 

70 Мб и like могут создавать значительную нагрузку, лучше перейти к полнотекстовому поиску.

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

   
 
 автор: marcus   (22.02.2007 в 19:07)   письмо автору
 
   для: cheops   (22.02.2007 в 16:21)
 

Спасибо. А сервер может сам загружать базу в память (оперативную) и там её болтать при запросах. В смысле без явного указания использования типа HEAP?

   
 
 автор: cheops   (22.02.2007 в 21:34)   письмо автору
 
   для: marcus   (22.02.2007 в 19:07)
 

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

   
 
 автор: marcus   (22.02.2007 в 22:35)   письмо автору
 
   для: cheops   (22.02.2007 в 21:34)
 

А как в функции against('поиск') задать схожесть по примеру like? В простом варианте запрос
SELECT * FROM table WHERE MATCH (name) AGAINST ('search'); просто будет искать константное выражение 'search', т.е. маска уже не работает

   
 
 автор: cheops   (23.02.2007 в 00:04)   письмо автору
 
   для: marcus   (22.02.2007 в 22:35)
 

Для этого используют логический режим
SELECT * FROM table 
WHERE MATCH (name) AGAINST ('search*' IN BOOLEAN MODE);

   
 
 автор: marcus   (23.02.2007 в 12:50)   письмо автору
 
   для: cheops   (23.02.2007 в 00:04)
 

Большое спасибо, cheops :-)

   
Rambler's Top100
вверх

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