Задавайте вопросы, мы ответим
Вы не зашли.
Есть база innobb 1Гб и запрос с
HAVING f_EA.`NO` = '100070'
на mSsql выплняется за 1 сек
на mYsql выплняется за 20 сек!
Если HAVING Count(f_EА.KEY)=0
на mSsql выплняется за 15 сек
на mYsql выплняется за 30 сек!
Почему HAVING так медленно работает, может увеличить какой-нить параметр или это специфика мускула?
Неактивен
Перепишите запрос так, чтобы было WHERE f_EA.`NO`=100070. HAVING
не использует индексы, что негативно влияет на производительность.
Для общей оптимизации, можете попробовать поставить innodb_buffer_pool_size=1G,
запросы будут выполняться быстрее.
P.S. Специфики тут нет, HAVING не должен работать по индексу, но допускаю,
что Microsoft могли что-то оптимизировать (например, автоматически преобразовывать
HAVING в WHERE в тривиальных случаях).
Неактивен
HAVING обычно требует сохранение результатов GROUP BY во временную таблицу и, затем, выборку из нее. Сделайте EXPLAIN запросу, скорее всего будет "using temporary".
Способы улучшить:
1. увеличить tmp_table_size - максимальный размер временной таблицы в памяти
2. постараться ужесточить условие WHERE, то есть все, что можно перенести в WHERE
3. уменьшить число выбираемых полей
например
SELECT u.id, u.name, u.description, sum(r.rating) total FROM users u LEFT JOIN ratings r ON r.user=u.rating GROUP BY u.id HAVING total>1000;
можно переписать как
SELECT id,name,description FROM users WHERE id IN (SELECT u.id, sum(r.rating) total FROM users u LEFT JOIN ratings r ON r.user=u.rating GROUP BY u.id HAVING total>1000);
тогда сортировка будет быстрее, так как сортировать только таблицу id-шников, а если это ключевое поле, то MySQL обойдется чтением ключа
Неактивен
Спасибо за тветы. Насчет where понятно, при explain действительно используется temparary, попробуем pool_size и упрощение запросов. Просто переписываем программу с access на delphi и mysql (немного не обычно) и делаем на время чтобы access работал с mysql (совсем не бычно), (т.к. зачастили люди в масках и спрашивают лицензию), и при переписании на mysql запросы которые выполнялись в access быстро на мускуле тормозят, в частности having, вот и подумали, а не упремся ли мы в стену большого тормоза и все старания на смарку.
Неактивен
В целом MySQL более быстрая база, чем Access. Я думаю, что если Вы поправите запросы и добавите необходимые ключи, то работать будет быстрее, чем раньше.
Неактивен
Думаю, ключевая проблема в комбинации Access+MySQL. Мой прошлый опыт
(правда, там было Access+MSSQL) говорит, что Access вытягивает все данные
из всех подсоединенных таблиц вне зависимости от того, нужны они ему или нет.
Более того, на каждом запросе он склонен перечитывать эти данные на случай,
если они изменились.
Неактивен