Как оптимизировать запросы MySQL? - PullRequest
1 голос
/ 27 июня 2010

В настоящее время я использую mysql с PHP, потому что это то, что я узнал, и мне никогда не приходилось использовать что-либо еще. В моем текущем проекте у меня есть база данных с 10 миллионами строк и около 10 столбцов, и я обнаружил, что она очень медленная, когда я выполняю сложные вызовы, как в локальной (windows) среде, так и в рабочей (linux) среде. Оба сервера имеют более 10 ГБ оперативной памяти. У меня уже установлен Zend AMF, поэтому все данные передаются в двоичном формате.

Я самоучка, и никогда не было, чтобы кто-нибудь учил меня всем, что нужно для эффективной работы с ДБМ. Моей первой мыслью было бы разбить БД на куски, а затем изменить весь мой php-код .. кажется, много хлопот и ошибок в php-коде ... есть ли лучший способ, о котором я не знаю?

Мой пользовательский интерфейс основан на флэш-памяти, и я готов сменить промежуточное ПО, если это означает значительное увеличение скорости. На данный момент я действительно знаю только PHP как промежуточное ПО.

Я не хочу изучать еще один БД на данный момент и считаю, что должны быть некоторые приемы, чтобы оптимизировать мою производительность, но я хотел бы получить некоторые идеи, прежде чем я взломаю свою базу данных.

fyi: база данных доступна только для чтения с точки зрения пользователя. пользователи НЕ вводят новые данные в базу данных. Кроме того, из 10 миллионов строк в базе данных интенсивно используются только около 200 000. (Я не знаю, какие строки 200К интенсивно используются, так как запись этой информации, вероятно, еще больше замедлит мою базу данных).

Каждый звонок выглядит примерно так:

SELECT   name, id, address 
FROM     table 
WHERE    date_added=? 
LIMIT    ?,? 
ORDER BY no_children ASC

... и различные другие операторы "select".

Ответы [ 2 ]

3 голосов
/ 27 июня 2010

У вас есть индекс в поле date_added?Если нет, создайте его и повторите попытку:

CREATE INDEX ix_date_added on table (date_added);

Вам также может быть интересно ознакомиться со следующей статьей Справочного руководства MySQL:

Вы также должны попытаться использовать EXPLAIN перед вашими SELECT операторами, чтобы увидеть, будут ли запросы использовать какие-либо из ваших индексов.Часто это первый шаг к правильному устранению проблем с производительностью.

0 голосов
/ 27 июня 2010

этот ответ также является ответом на вопрос Даниэля Вассалло:

CREATE INDEX ix_date_added_no_children on table (date_added, no_children);

правильнее

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