Я новичок в mysql. При создании проекта я не обращал внимания на тип таблиц и тип сопоставления. Теперь у меня уже есть 20 таблиц, 15 таблиц типа MyISAM, остальные - типа innoDB. Я заметил, что мое приложение становится очень медленным. Это из-за типа таблицы?
Больше информации:
Параметры сортировки 15 таблиц - utf_unicode_ci, а остальные 5 - latin1_swedish_ci. (Я не уверен, почему он отличается) Влияет ли это на производительность?
Мое приложение находится в Flash> php> MySQL.
Вход в систему, загрузка рекордов и сохранение рекордов сейчас происходит очень-очень-очень медленно !!
У каждого типа БД есть определенные плюсы и минусы. Своеобразным достоинством InnoDB является то, что он поддерживает блокировку строк в отличие от блокировки всей таблицы MyIsam. Что это значит для вас? Если у вас есть таблица, которая очень часто читается и очень часто изменяется, а в операторе SQL используется команда блокировки, InnoDB будет работать немного быстрее. Поскольку он должен заблокировать только строку, которой управляют, а не всю таблицу.
Кроме этого, между ними действительно не так много разницы. Все сводится к отличному планированию d / b, обеспечению индексации ваших таблиц и их оптимизации.
[EDIT 2009-11-11]
Поразмыслив над проблемой еще немного, мне интересно, действительно ли проблема в коде. Базы данных очень редко являются корнем проблемы. Выполните несколько тестовых запросов из gui / cli и посмотрите, сколько времени в среднем занимает ваша программа. Если число больше полсекунды (0,05), есть место для оптимизации. Если это меньше полсекунды, ваша база данных в порядке.
После оптимизации еще раз проверьте время запроса. Вероятно, теперь они будут еще меньше. Готов поспорить, что ошибка в коде.
Это медленно, если вы перейдете прямо к базе данных MYSQL и выполните запрос? (либо из инструментов командной строки mysql, либо с использованием графического интерфейса, такого как SQLYog). Это медленно, если вы просто используете PHP-> MySQL?
Возможно, мы пытаемся решить проблему MySQL, когда с БД все в порядке, а узкое место производительности находится где-то еще; из вашего описания запрос очень простой и должен быть быстрым даже без оптимизации.
Основное отличие MyISAM от InnoDB состоит в том, что последний может использовать транзакции для атомарных изменений в базе данных. MyISAM обычно работает быстрее для более простых таблиц, но это не должно быть проблемой для вашей настройки. Вы создали правильные индексы в таблице, чтобы делать обновления быстрее?
Это не имеет значения, по крайней мере, для небольших баз данных. Я бы порекомендовал MyISAM, так как он проще в администрировании и занимает немного меньше памяти. У него не так много дополнительных функций, как у InnoDB, но то, что вы делаете, действительно не имеет значения.
Я подозреваю, что у вас есть две проблемы, не зависящие от типа таблицы: основная - это индексация, а другая - память.
1) Если у вас есть уникальный столбец «ID» в таблице, убедитесь, что вы индексируете его и что он установлен как «уникальный». Кроме того, вы должны попытаться создать индексы для любого столбца, который вы используете в предложении WHERE. Например, если вы ищете имя пользователя (например, SELECT * FROM userdetails WHERE username='harry';
), то вы должны поместить вторичный индекс в столбец «имя пользователя».
2) Память - вы используете виртуальный хостинг или VPS? возможно, у вас заканчивается оперативная память? Попробуйте увеличить как минимум 256 МБ ОЗУ.
Тип стола делает огромный разница в определении того, как будет работать база данных, особенно при большой нагрузке с большим количеством строк.
Например, MyISAM обычно быстрее, чем InnoDB, однако MyISAM должен блокировать всю таблицу при выполнении обновлений или удалений или вставок, которые не добавляются к файлу, предотвращая все другие операции (включая выбор) до завершения операции. InnoDB не выполняет блокировку на уровне таблицы, поэтому может более эффективно обрабатывать этот сценарий.
InnoDB и MyISAM также по-разному реализуют индексацию, поэтому индекс, который делает таблицу более эффективной для одного из типов, может фактически замедлить ее работу при использовании другого типа таблицы.
Здесь слишком много различий, чтобы перечислять их здесь, и большинство из них требует времени, чтобы объяснить, но я бы посоветовал просмотреть соответствующие разделы из Высокая производительность MySQL Чтобы получить больше информации.