|
Тема |
Re: MySQL и локване на таблици при сложна SQL заяв [re: Пeнчo] |
|
Автор | ДядoMpaз (Нерегистриран) | |
Публикувано | 18.05.06 11:53 |
|
|
Като цяло миграция към InnoDB е най доброто което можеш да направиш. Не е нужно да мигрираш цялата база ако те притеснява размера на базата. Можеш да мигрираш само част от таблиците - ALTER TABLE <table_name> TYPE=INNODB; При големи таблици това може да отнеме доста време така че ако ще го правиш на production сървър по добре си създай нова таблица INNODB и копирай данните в нея на групи от по 1000-2000, че да избегнеш locks.
Ако не ти се занимава с ugrade на първо място обаче мисля че е добре да пробваш да оптимизираш заявките и да пипнеш малко индексите на таблиците и настройките на MySQL. Дори и при няколко милиона записа няма да имаш проблем да вадиш данните който ти трябват без да имаш проблеми с locks.
1. Сложи индекси на полетата по който търсиш - в случая ти трябват индекси на inventory.employee_id и employee.department_id . Пусни EXPLAIN за да видиш какви индекси използват заявките
2. MySQL сам си оптимизира заявките но за аз лично тази заявка бих я написал като
select inventory.* from employee
left join inventory on inventory.employee_id=employee.employee_id
where employee.department_id=123
Така или иначе първо се прави търсенето в employee и после вадиш записите от inventory
3. Поразгледай малко настройките на MySQL - има няколко книги на Jeremy Zawodny за оптимизация. Ако можеш вдигни размера на
key_buffer_size, read_buffer_size, read_rnd_buffer_size, sort_buffer_size като внимавай да не изполваш повече памет отколкото имаш. Идеалния вариант е размера на key_buffer_size да е колкото размера на всички индекс (MYI) файлове
|
| |
|
|
|