MySQL присоединиться и выбрать разницу в скорости - PullRequest
1 голос
/ 14 апреля 2011

Мне нужно sql запрос

SELECT child.name,(COUNT(parent.name) - (parentDepth.depth + 1)) AS depth 
from category as child,category as parent,category as sub_parent,
( select child.name,(count(parent.name)-1) as depth from category as child,category as parent where child.lft between parent.lft and parent.rgt and child.name='ELECTRONICS' ) as parentDepth 
where child.lft between parent.lft and parent.rgt and child.lft between sub_parent.lft and sub_parent.rgt and sub_parent.name=parentDepth.name 
group by child.name having depth >0 order by child.lft

USE JOIN

SELECT child.name,(COUNT(parent.name) - (parentDepth.depth + 1)) AS depth from 
category as child join category as parent on child.lft between parent.lft and parent.rgt join category as sub_parent on child.lft between sub_parent.lft and sub_parent.rgt,
( select child.name,(count(parent.name)-1) as depth from category as child,category as parent where child.lft between parent.lft and parent.rgt and child.name='ELECTRONICS' ) as parentDepth 
where sub_parent.name=parentDepth.name 
group by child.name having depth >0 order by child.lft

Я хочу знать, с одним лучше!Я имею в виду производительность и скорость

Ответы [ 3 ]

1 голос
/ 14 апреля 2011

разница в производительности, если такая разница существует, будет абсолютно минимальной.в сущности, , -синтаксис - это не что иное, как более короткая форма написания объединения, поэтому единственным отличием будет время, используемое для «разбора» операторов.Есть много более важных вещей, которые нужно сделать, чтобы повысить производительность базы данных, например

  • с использованием индексов
  • не выбирать неиспользуемые поля
  • выбиратьлучший механизм хранения для ваших нужд

лично, я бы использовал второй синтаксис, потому что он более читабелен для меня (и читаемый код важен - гораздо важнее, чем такие крошечные различия в производительности) - но этотолько мое субъективное мнение, другим может понравиться первый синтаксис, потому что он короче ...

0 голосов
/ 19 ноября 2011

Я предпочитаю проверять и получать данные, а не спекулировать (даже если рассуждения кажутся обоснованными).

На уровне отдельного запроса можно использовать операторы SHOW PROFILE для отображения информации о профилировании для операторов, выполненных в ходе текущего сеанса:

http://dev.mysql.com/doc/refman/5.1/en/show-profiles.html

Это даст вам представление о том, сколько времени требуется для выполнения запроса в вашей базе данных MySQL (то есть, продолжительность или скорость запроса). Конечно, на уровне приложений могут быть и другие вещи.

Для общего обзора того, как оптимизировать MySQL, стоит обратить внимание на интересную книгу «High Performance MySQL» Барона Шварца и др., Опубликованную O'Reilly Media, Inc. (ISBN: 9780596101718) http://www.highperfmysql.com/
В книге подробно объясняется, как интерпретировать вывод операторов EXPLAIN, а также много других полезных тем.

0 голосов
/ 14 апреля 2011

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

Другое решение состоит в том, чтобы выполнить этот запрос много раз (скажем, 100) и измерить среднее время ответа.

Просмотр ваших запросов привел меня к мысли, что вы, вероятно, могли бы написать лучше (хотя не уверен - слишком сложный для первого взгляда).

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