Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
mysql оптимизация на denwer |

08.09.2009, 11:58
|
|
Новичок
Регистрация: 07.03.2008
Сообщений: 5
Провел на форуме: 15083
Репутация:
0
|
|
mysql оптимизация на denwer
Проблема
Тормозит скрипт, долго выполняет работу,
100 слов ищеться около 30 сек, по таблице полмилиона записей
Исходные данныые
комп десктоп 2,5 celeron 1гб оперативной памяти, + denwer3 (denwer.ru)
использую класс, dbsimple (http://dklab.ru/lib/DbSimple/)
создаю таблицу по существу нужны 2 колонки (
1столбец - слово,
2столбец - цифра,
)
PHP код:
"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;";
после создания таблицы заполняю ее на полмилиона записей, здесь все норм
дальше начинаются проблемы
работа скрипта и трабла, следующая,
скрипт ищет слово в первом столбце
запрос делаю такой
PHP код:
$sID = $DB->selectCell('SELECT num FROM table2 WHERE ones=?', $onesto);
искать слов нужно много,
итого запускаю скрипт на поиск 100 слов ищеться около 30 сек это нормально?
что пробывал ?
решил настройть my.cnf
PHP код:
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
PHP код:
;;;;;;;;;;;;;;;;;;;
; 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
Последний раз редактировалось agamerr; 09.09.2009 в 10:28..
|
|
|

08.09.2009, 15:46
|
|
Постоянный
Регистрация: 03.06.2009
Сообщений: 385
Провел на форуме: 3178262
Репутация:
389
|
|
у мускуля 1 мега запрос быстрее 100 маленьких => делай выборку SELECT * FROM table WHERE column="word_1" OR column="word_2" OR ....
на пхп что-то в виде
PHP код:
<?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
Последний раз редактировалось FireFenix; 08.09.2009 в 15:54..
|
|
|

08.09.2009, 17:57
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
Провел на форуме: 2769640
Репутация:
1304
|
|
agamerr Главное - сделать индекс на столбец в котором ищете. Потом открыть глаза на прикрепленные темы. А дальше уже читать например такое: http://habrahabr.ru/blogs/mysql/20246/
FireFenix
PHP код:
$words = array('слово1','слово2');
$sID = $DB->selectCell('SELECT num FROM table2 WHERE ones IN ("'.implode('","',array_map('mysql_real_escape_string',$words)).'")')
__________________
Любая действущая программа устарела.
Создайте систему, которой сможет пользоваться даже дурак ,и только дурак захочет ею пользоваться.
Как правильно задавать вопросы: _http://www.yakimchuk.ru/questions.htm
|
|
|

09.09.2009, 10:26
|
|
Новичок
Регистрация: 07.03.2008
Сообщений: 5
Провел на форуме: 15083
Репутация:
0
|
|
FireFenix, Gifts,
биг респект сейчас буду рыть,
что самое интересное написал на форум программистов,
нихрена толкового не посоветовали, 
|
|
|

09.09.2009, 13:32
|
|
Новичок
Регистрация: 07.03.2008
Сообщений: 5
Провел на форуме: 15083
Репутация:
0
|
|
народ палю тему, порекомендовали погуглить по 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 сек 
|
|
|

09.09.2009, 14:50
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
Сообщение от agamerr
народ палю тему, порекомендовали погуглить по 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 сек 
Мда,некуевые настроечки.ТОлько вот вопрос,а на хочтинге ты тоже будеш править my.conf?
Или будеш на денвере держать
--
Тебе же дали наверху верные советы,зачем ты полез в насройки памяти.Не трогай их.Сделай как советовали по инексу,и большгим запросом.
|
|
|

09.09.2009, 15:26
|
|
Новичок
Регистрация: 07.03.2008
Сообщений: 5
Провел на форуме: 15083
Репутация:
0
|
|
это называется против лома нет приема
у меня скрипт десктопный, поэтому прокатит,
эти рекомендации годятся для серверов
с памятью от 1 гб
что касается рекомендаций
по индексу столбцов заморочился и скорее всего реализую просто интерсно насколько быстрее будет работать
Последний раз редактировалось agamerr; 09.09.2009 в 16:40..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|