Когда использовать STRAIGHT_JOIN с MySQL

Еще один способ убить ваше приложение - отправить ваше приложение на задний план (используя домашнюю кнопку) и вызвать:

adb shell am kill com.your.package

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

Например, если у вас есть широковещательные приемники, зарегистрированные в Манифест, они все равно начнутся без перезапуска вашего приложения вручную, по сравнению с принудительной остановкой, которую вы можете достичь, используя:

adb shell am force-stop com.your.package
84
задан mwigdahl 24 March 2009 в 20:42
поделиться

3 ответа

Я не рекомендовал бы использовать STRAIGHT_JOIN без серьезного основания. Мой собственный опыт состоит в том, что оптимизатор запросов MySQL выбирает плохой план запросов чаще, чем я хотел бы, но не достаточно часто, что необходимо просто обойти его в целом, который является тем, что Вы сделали бы, если бы Вы всегда использовали STRAIGHT_JOIN.

Моя рекомендация состоит в том, чтобы оставить все запросы как регулярные СОЕДИНЕНИЯ. Если Вы обнаруживаете, что один запрос использует субоптимальный план запросов, я предложил бы сначала пытаться переписать или реструктурировать запрос немного, чтобы видеть, выберет ли оптимизатор затем лучший план запросов. Кроме того, для innodb, по крайней мере, удостоверьтесь, что это не просто, что Ваши индексные статистические данные являются устаревшими (, АНАЛИЗИРУЮТ ТАБЛИЦУ ). Это может заставить оптимизатор выбирать плохой план запросов. Подсказки оптимизатора должны обычно быть Вашим последним средством.

Другая причина не использовать подсказки запроса состоит в том, что Ваше распределение данных может изменяться со временем, или Ваша индексная селективность может измениться, и т.д. когда Ваша таблица растет. Ваши подсказки запроса, которые оптимальны теперь, могут стать субоптимальными со временем. Но оптимизатор будет не мочь адаптировать план запросов из-за Ваших теперь устаревших подсказок. Вы остаетесь более гибкими, если Вы позволяете оптимизатору принимать решения.

71
ответ дан nathan 5 November 2019 в 16:21
поделиться

От ссылка MySQL JOIN :

"STRAIGHT_JOIN подобен СОЕДИНЕНИЮ, за исключением того, что стол, из-за которого встают, всегда читается перед правильной таблицей. Это может использоваться для тех (небольшое количество) случаи, для которых оптимизатор соединения помещает таблицы в неправильный порядок".

22
ответ дан jjclarkson 5 November 2019 в 16:21
поделиться

MySQL isn’t обязательно хороший в выборе соединения заказывает в сложных запросах. Путем определения сложного запроса как straight_join запрос выполняет соединения в порядке they’re указанный. Путем размещения таблицы, чтобы быть наименее общим знаменателем сначала и определения straight_join Вас могут улучшить производительность запросов.

18
ответ дан IAdapter 5 November 2019 в 16:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: