Проблема Тормозит скрипт, долго выполняет работу, 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
у мускуля 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
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)).'")')
FireFenix, Gifts, биг респект сейчас буду рыть, что самое интересное написал на форум программистов, нихрена толкового не посоветовали,
народ палю тему, порекомендовали погуглить по 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 сек
это называется против лома нет приема у меня скрипт десктопный, поэтому прокатит, эти рекомендации годятся для серверов с памятью от 1 гб что касается рекомендаций по индексу столбцов заморочился и скорее всего реализую просто интерсно насколько быстрее будет работать