|
|
|
| Имеется таблица из 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();
//--------------------------------------------------------------------------
Так вот запрос выполняется, но после передачи данных сервер БД находится в загруженности, причем очень даже приличной. В коде вроде все нормально. Что может так загружать? Заранее спасибо | |
|
|
|
|
|
|
|
для: marcus
(22.02.2007 в 13:45)
| | 70 Мб и like могут создавать значительную нагрузку, лучше перейти к полнотекстовому поиску.
PS Сегментирование таблицы (разбиение её на несколько частей) тоже хорошо должно помогать, но оно доступно только начиная с версии 5.1. | |
|
|
|
|
|
|
|
для: cheops
(22.02.2007 в 16:21)
| | Спасибо. А сервер может сам загружать базу в память (оперативную) и там её болтать при запросах. В смысле без явного указания использования типа HEAP? | |
|
|
|
|
|
|
|
для: marcus
(22.02.2007 в 19:07)
| | В основном не базу, а ключи, если под кэш ключей выделена оперативная память. | |
|
|
|
|
|
|
|
для: cheops
(22.02.2007 в 21:34)
| | А как в функции against('поиск') задать схожесть по примеру like? В простом варианте запрос
SELECT * FROM table WHERE MATCH (name) AGAINST ('search'); просто будет искать константное выражение 'search', т.е. маска уже не работает | |
|
|
|
|
|
|
|
для: marcus
(22.02.2007 в 22:35)
| | Для этого используют логический режим
SELECT * FROM table
WHERE MATCH (name) AGAINST ('search*' IN BOOLEAN MODE);
|
| |
|
|
|
|
|
|
|
для: cheops
(23.02.2007 в 00:04)
| | Большое спасибо, cheops :-) | |
|
|
|