За последние 24 часа нас посетили 34084 программиста и 1319 роботов. Сейчас ищут 1026 программистов ...

Индекс и сравнение дат

Тема в разделе "MySQL", создана пользователем igordata, 4 мар 2011.

  1. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    каким индексом лучше ускорить запрос:
    [sql] SELECT
    sessions.session,
    sessions.exit_date
    FROM
    `sessions`,
    `agent`
    WHERE
    NOW() - sessions.exit_date < 6000
    AND DATE_FORMAT(NOW(), '%y%m%d') = DATE_FORMAT(sessions.enter_date, '%y%m%d')
    AND sessions.ip='тут IP'
    AND sessions.agent = agent.id
    AND agent.agent='тут агент'
    ORDER BY sessions.exit_date DESC
    LIMIT 1[/sql]
    в плане сравнения дат
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    igordata
    пробуй отдельные индексы и составные, в текстовых полях лучше индексировать префикс таблицы поэксперементируй с длинной, ордер бай тоже юзает индексы, пробуй и смотри explain
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в текстовых пофик. индексы есть, все ок =) норм. А вот даты индексируются? помогает это при сравнении? нифига не знаю про это. Помогает индекс при сравнении даты за период? вот в чем соль.
     
  4. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    igordata
    может они есть но не используются, добавь индекс и посмотри explain колонки possible_keys, key, Extra
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    помогите подкрутить мускул. На сервере 4 гига оперативки. Что б выкрутить, если памяти не жалко?

    Код (Text):
    1. [mysqld]
    2. port            = 3306
    3. socket          = /var/run/mysql/mysql.sock
    4. skip-locking
    5. key_buffer = 16K
    6. max_allowed_packet = 1M
    7. table_cache = 4
    8. sort_buffer_size = 64K
    9. read_buffer_size = 256K
    10. read_rnd_buffer_size = 256K
    11. net_buffer_length = 2K
    12. thread_stack = 128K
    13. bind-address=127.0.0.1
    14. server-id       = 1
    15. skip-federated
    16.  
    17. [client]
    18. port        = 3306
    19. socket      = /var/run/mysql/mysql.sock
    20.  
    21.  
    22. [mysqldump]
    23. quick
    24. max_allowed_packet = 16M
    25.  
    26. [mysql]
    27. no-auto-rehash
    28.  
    29. [isamchk]
    30. key_buffer = 8M
    31. sort_buffer_size = 8M
    32.  
    33. [myisamchk]
    34. key_buffer = 8M
    35. sort_buffer_size = 8M
    36.  
    37. [mysqlhotcopy]
    38. interactive-timeout
     
  6. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    key_buffer_size кеширует индексы
    query_buffer_size кеширует выбоки
    на долго работающем серваке пишешь SHOW GLOBAL STATUS
    смотришь Key_read_requests и Key_reads
    Key_read_requests - запросы из кеша
    Key_reads - с диска

    далее
    http://mysqltips.blogspot.com/2007/03/key-buffer.html
    но это все рекомендации, сам не пробовал, но почитаю еше в паре мест и попробую