Оптимизация sql запросов...

Discussion in 'PHP' started by Doom123, 25 Jun 2008.

  1. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    МОжет ли кто нибудь дать советы по оптимизации скл запросов... И примеры кэширования?
     
  2. Naydav

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

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Ну из самого простого, но не менее важного,

    - это правильные индексы!!!!(их не так уж и мало)
    - правильный формат данных (если дата, то "timestamp", если флаг, то "bool")
    - если нужно выбрать только title, то пишем
    "SELECT title FROM table", а не "SELECT * FROM table" Это важно!!!
    - использование функций (MAX(), MIN(), NOW()), а не придумывать велосипед, функций очень много
    - UNIQUE индексы быстрее, чем индексы не по уникальным полям
    - использование точных значений
    - Поля NOT NULL экономят место и исключают проверки
    - Вместо text лучше использовать character varying(255), или меньше
    - Чем меньше размер типа, тем лучше (int, tinyint)
    - Использовать наиболее простые запросы SQL. Т.е. без всяких подзапросов, с наименьшим числом объединений данных таблиц и условий, ну и т.п.
    - объединять данные в одну таблицу, дабы уменьшить число SQL запросов
    - НОРМАЛИЗАЦИЯ ТАБЛИЦ!!!!!


    Кэширование:
    Вообще нужно сначала иследовать бд
    сделать "VACUUM ANALYZE"
    (EXPLAIN [ ANALYZE ] [ VERBOSE ])
     
    #2 Naydav, 25 Jun 2008
    Last edited: 25 Jun 2008
    1 person likes this.
  3. Jer1cho

    Jer1cho Member

    Joined:
    6 Jun 2008
    Messages:
    209
    Likes Received:
    65
    Reputations:
    10
    Вот очень интересная статья:
    http://habrahabr.ru/blog/sql/45174.html
     
  4. mouse.pro

    mouse.pro Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    113
    Likes Received:
    73
    Reputations:
    14
    Мне нужно сделать запрос:
    Скопировать из таблицы test все строки в таблицу test2 где id='1'
    Я решил сделать так:
    select * from test1 where id='1' into outfile 'tmp.txt'
    load data infile 'tmp.txt' into table test2

    Можно как-то проще сделать?
     
  5. Naydav

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

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    Ну так как ты копируешь, точно не правильно
    Вернее это извращение!

    Правильно
     
    #5 Naydav, 25 Jun 2008
    Last edited: 25 Jun 2008
    1 person likes this.
  6. mouse.pro

    mouse.pro Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    113
    Likes Received:
    73
    Reputations:
    14
    Ну это я не сам писал запрос, мне подсказали как знали.
    Спасибо, твой запрос помог)