PDA

Просмотр полной версии : mysql оптимизация на denwer


agamerr
08.09.2009, 11:58
Проблема
Тормозит скрипт, долго выполняет работу,
100 слов ищеться около 30 сек, по таблице полмилиона записей

Исходные данныые
комп десктоп 2,5 celeron 1гб оперативной памяти, + denwer3 (denwer.ru)
использую класс, dbsimple (http://dklab.ru/lib/DbSimple/)


создаю таблицу по существу нужны 2 колонки (
1столбец - слово,
2столбец - цифра,
)


"CREATE TABLE $table2 (
ide INT(15) NOT NULL AUTO_INCREMENT,
ones VARCHAR(30) NOT NULL,
num INT(15) DEFAULT 1,
UNIQUE KEY ide (ide)
)CHARACTER SET utf8 COLLATE utf8_unicode_ci;";


после создания таблицы заполняю ее на полмилиона записей, здесь все норм

дальше начинаются проблемы
работа скрипта и трабла, следующая,

скрипт ищет слово в первом столбце
запрос делаю такой

$sID = $DB->selectCell('SELECT num FROM table2 WHERE ones=?', $onesto);

искать слов нужно много,
итого запускаю скрипт на поиск 100 слов ищеться около 30 сек это нормально?


что пробывал ?
решил настройть my.cnf



my.cnf

# Различные настройки, оптимизированные для небольшого объема памяти.
skip-locking
key_buffer = 42M
max_allowed_packet = 99M
table_cache = 4
sort_buffer_size = 12M
read_buffer_size = 12M
read_rnd_buffer_size = 12M
net_buffer_length = 12M
thread_stack = 12M


php.ini
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;

max_execution_time = 3000 ; Maximum execution time of each script, in seconds
max_input_time = 6000 ; Maximum amount of time each script may spend parsing request data
;max_input_nesting_level = 64 ; Maximum input variable nesting level
memory_limit = 500M ; Maximum amount of memory a script may consume (128MB)




проблема не решена скрипт грузит ц/п, и хреново пашет на мой взляд,
что можно изменить или оптимизировать
есть ли лечение?
I need help

FireFenix
08.09.2009, 15:46
у мускуля 1 мега запрос быстрее 100 маленьких => делай выборку SELECT * FROM table WHERE column="word_1" OR column="word_2" OR ....

на пхп что-то в виде

<?php

$words = Array(); //массив слов

$query = '';

foreach($words as $value)
{
if (strlen($query) > 0)
{
$query .= ' OR ';
}

$query .= 'column="' . $value . '"';
}

$sID = $DB->selectCell('SELECT num FROM table2 WHERE' . $query);

?>


Если не волнует как данные хранятся..... то можно вначале все искомые слова сложить в таблицу и сделать JOIN

Gifts
08.09.2009, 17:57
agamerr Главное - сделать индекс на столбец в котором ищете. Потом открыть глаза на прикрепленные темы. А дальше уже читать например такое: http://habrahabr.ru/blogs/mysql/20246/
FireFenix $words = array('слово1','слово2');
$sID = $DB->selectCell('SELECT num FROM table2 WHERE ones IN ("'.implode('","',array_map('mysql_real_escape_string',$words)).'")')

agamerr
09.09.2009, 10:26
FireFenix, Gifts,
биг респект сейчас буду рыть,
что самое интересное написал на форум программистов,
нихрена толкового не посоветовали, :)

agamerr
09.09.2009, 13:32
народ палю тему, порекомендовали погуглить по my-huge.ini
итого
в настройках my.ini

выставил такие,
skip-locking
key_buffer = 300M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
net_buffer_length = 33M
thread_stack = 33M
thread_cache_size = 8
sort_buffer_size = 30M
query_cache_size = 32M


500 запросов , база 1млн записей
скорость внимание 2 сек :cool:

m0Hze
09.09.2009, 14:50
народ палю тему, порекомендовали погуглить по my-huge.ini
итого
в настройках my.ini

выставил такие,
skip-locking
key_buffer = 300M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
net_buffer_length = 33M
thread_stack = 33M
thread_cache_size = 8
sort_buffer_size = 30M
query_cache_size = 32M


500 запросов , база 1млн записей
скорость внимание 2 сек :cool:

Мда,некуевые настроечки.ТОлько вот вопрос,а на хочтинге ты тоже будеш править my.conf?
Или будеш на денвере держать
--
Тебе же дали наверху верные советы,зачем ты полез в насройки памяти.Не трогай их.Сделай как советовали по инексу,и большгим запросом.

agamerr
09.09.2009, 15:26
это называется против лома нет приема

у меня скрипт десктопный, поэтому прокатит,
эти рекомендации годятся для серверов
с памятью от 1 гб

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