mysql оптимизация на denwer

Discussion in 'PHP' started by agamerr, 8 Sep 2009.

  1. agamerr

    agamerr New Member

    Joined:
    7 Mar 2008
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Проблема
    Тормозит скрипт, долго выполняет работу,
    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 scriptin 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 agamerr, 8 Sep 2009
    Last edited: 9 Sep 2009
  2. FireFenix

    FireFenix Elder - Старейшина

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    у мускуля 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
     
    #2 FireFenix, 8 Sep 2009
    Last edited: 8 Sep 2009
    1 person likes this.
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    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)).'")'
     
    _________________________
    2 people like this.
  4. agamerr

    agamerr New Member

    Joined:
    7 Mar 2008
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    FireFenix, Gifts,
    биг респект сейчас буду рыть,
    что самое интересное написал на форум программистов,
    нихрена толкового не посоветовали, :)
     
  5. agamerr

    agamerr New Member

    Joined:
    7 Mar 2008
    Messages:
    2
    Likes Received:
    0
    Reputations:
    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 сек :cool:
     
  6. agamerr

    agamerr New Member

    Joined:
    7 Mar 2008
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    это называется против лома нет приема

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

    что касается рекомендаций
    по индексу столбцов заморочился и скорее всего реализую просто интерсно насколько быстрее будет работать
     
    #6 agamerr, 9 Sep 2009
    Last edited: 9 Sep 2009
Loading...
Similar Threads - mysql оптимизация denwer
  1. GAiN
    Replies:
    3
    Views:
    7,435