PHP и MySQL: оптимизировать базу данных - PullRequest
3 голосов
/ 04 марта 2010

У меня есть база данных с более чем 10000000 строк. Запросы прямо сейчас могут занять несколько секунд, чтобы найти основную информацию. Это не является предпочтительным, я знаю, что лучший способ оптимизировать - минимизировать число строк, что возможно, но сейчас у меня нет времени, чтобы сделать это.

Какой самый простой способ оптимизировать базу данных MySQL , чтобы при ее запросе требовалось мало времени?

Я не против размера базы данных, это не имеет значения, поэтому любые оптимизации, которые увеличивают размер, подойдут. Я не очень хорош с оптимизацией, сейчас у меня настроены индексы, но я не уверен, насколько лучше я смогу получить от этого.

Я со временем урежу базу данных правильно, но есть ли быстрое временное решение?

Ответы [ 6 ]

2 голосов
/ 04 марта 2010

Как я вижу, вы запрашиваете 40 тыс. Строк в базе данных, для загрузки данных требуется время, чтобы их просто перенести.

Кроме того, никогда не спрашивайте "как улучшить в целом". Не существует способа «общей» оптимизации. Оптимизация всегда является результатом профилирования и исследования вашего конкретного случая.

2 голосов
/ 04 марта 2010

Помимо индексации, которая уже была предложена, вы можете также изучить таблицы секционирования, если они большие.

Разбиение в MySQL

Трудно быть конкретным здесь, потому что у нас очень ограниченная информация, но правильная индексация и разделение могут пройти очень долгий путь. Правильная индексация может быть длительной темой, но в очень общем смысле вам нужно индексировать столбцы, по которым вы запрашиваете.

Например, скажем, у вас есть таблица сотрудников, и у вас есть обычные столбцы SSN, FNAME, LNAME. В дополнение к этим столбцам мы скажем, что у вас есть еще 10 столбцов в таблице.

Теперь у вас есть этот запрос:

SELECT FNAME, LNAME FROM EMPLOYEES WHERE SSN = 'blah';

Игнорируя тот факт, что SSN может быть здесь первичным ключом и может иметь уникальный индекс, вы, скорее всего, выиграете в производительности, создав еще один составной индекс, содержащий столбцы (SSN, FNAME, LNAME). Это выгодно потому, что база данных может удовлетворить этот запрос, просто просматривая составной индекс, поскольку он содержит все значения, необходимые в отсортированном и компактном пространстве. (то есть меньше ввода / вывода). Несмотря на то, что индекс только по SSN является лучшим методом доступа к полному сканированию таблиц, база данных все равно должна считывать блоки данных для индекса (ввода-вывода), находить значения, которые будут содержать указатели на записи. необходимо выполнить запрос, затем нужно будет прочитать различные блоки данных (читай: больше случайных операций ввода / вывода), чтобы получить фактические значения для fname и lname.

Это, очевидно, очень упрощено, но использование индексов таким способом может значительно сократить число операций ввода-вывода и повысить производительность вашей базы данных.

Некоторые другие ссылки здесь могут оказаться полезными:

1 голос
/ 05 марта 2010

Если вы выполняете упорядочивание или сложные запросы, возможно, вам придется использовать многостолбцовые индексы. Например, если вы ищете, где x.name = 'y' ИЛИ ​​x.phone = 'z', возможно, стоит поставить указатель на имя, телефон. Упрощенный пример, но если вам нужно это сделать, вам все равно придется изучить его дальше:)

1 голос
/ 04 марта 2010

В вашем примере 'WHERE x = y', если y - имя столбца, создайте индекс также с y.

Ключ с индексом - это # ​​результат вашего запроса на выборку, который должен составлять около 3% ~ 5% при сравнении всей таблицы, и он будет быстрее.

Также помогает архивирование таблицы. Я не знаю, как это сделать, в основном задача DBA. Для администраторов баз данных это простая задача, если они это делают.

1 голос
/ 04 марта 2010

Используйте индексы для столбцов, по которым вы часто выполняете поиск.

0 голосов
/ 04 марта 2010

Ваши запросы используют ваши индексы? Что говорит вам выполнение EXPLAIN для ваших избранных запросов?

Первым (и самым простым) шагом будет проверка оптимизации ваших запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...