PHP и оптимизация MySQL-запроса

Мне нужно оптимизировать SQL-запросы в моем PHP-коде, используемом чрезмерно загруженным веб-сервисом. Я получаю список слов.

1) получить идентификаторы слова

2) идентификатор foreach получить слово как объект php

3) напечатать детали слова в xml

Теперь у меня есть код, который принимает этот идентификатор Word в конструкторе.
Затем, когда пользователь обращается к свойствам, лениво загружает данные свойства.
Веб-сервис возвращает все детали слова, поэтому он принимает все свойства слова.
Делая много 5-10 простых запросов SQL каждый раз, как получить родное слово, получить иностранное слово, получить транскрипцию. Это было сделано таким образом, предполагая, что мне один раз нужно меньше информации о слове, а в другой раз мне нужно больше информации.

Теперь, когда мой хостинг-провайдер деактивировал мой веб-сайт, так как это сильно повлияло на ресурсы общего хостинга, мне нужно было его оптимизировать.
1) Я предоставлю ИНДЕКС, УНИКАЛЬНЫЙ, где это возможно, и это еще не использовалось.
2) Я думаю о замене многих простых SQL-запросов, лениво извлекающих свойства слова, с более длинным соединяющим запросом:

EXPLAIN SELECT nt.deutsch_id, nt.article, n.deutsch_word, ft.french_id, ft.article, f.french_word, p.part, fd.transcription, fd.definition
FROM translation_enfr ft
INNER JOIN translation_ende nt ON nt.translation_id = ft.translation_id
INNER JOIN deutsch n ON n.deutsch_id = nt.deutsch_id
INNER JOIN french f ON f.french_id = ft.french_id
INNER JOIN parts p ON p.part_id = ft.part_id
LEFT JOIN french_details fd ON fd.translation_id = ft.translation_id
WHERE ft.translation_id =2

Как вы думаете, это будет лучше / быстрее, чем с помощью:

public function getNativeWord($withArticle = true) {
if(is_null($this->nativeWord)) {
$q = "SELECT {$langLabel}_word FROM {$langLabel}
WHERE {$langLabel}_id = :native_id";
}
}

И другие текущие запросы похожи:

"SELECT {$langLabel}_word FROM {$langLabel} WHERE {$langLabel}_id = :foreign_id""SELECT article FROM translation_en{$this->nativeLang} WHERE translation_id = :translation_id";
"SELECT parts.part FROM parts INNER JOIN translation ON parts.part_id = translation.part_id WHERE translation_id = :trans_id""SELECT transcription FROM {$langLabel}_details WHERE translation_id = :trans_id";
"SELECT definition FROM {$langLabel}_details WHERE translation_id = :trans_id";

Я думаю, чтобы предварительно загрузить каждое свойство этого объекта Word, только оставаясь, чтобы загрузить легко изображений, приговоры, Комментарии как здесь у меня есть 1toMany отношения!

ОБНОВЛЕНО 1

Выход из ОБЪЯСНИТЬ ВЫБРАТЬ … *

объяснить в MySQL

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]