Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> sql-запрос, максимально оптимизировать 
:(
    Опции темы
Bulat
Дата 20.8.2007, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



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

на входе DirectionClassification.classification_id 

в итоге нужно получить каждый Links.link_id, Links.remark

Код

select Directions.direction, Aliases.classification_id, BaseClassification.name, Links.link_id, Links.remark
from DirectionClassification, DirectionAliases, Directions, Aliases, BaseClassification, Links
where
DirectionClassification.classification_id = 11
and DirectionClassification.classification_id = DirectionAliases.classification_id
and DirectionAliases.direction_id = Directions.direction_id
and DirectionAliases.direction_id = Links.direction_id
and Directions.lang_id
and Directions.lang_id  = Aliases.language_id
and Aliases.classification_id = BaseClassification.classification_id

#родительская относительно `DirectionAliases
CREATE TABLE `DirectionClassification` (
  `id` mediumint(5) unsigned NOT NULL auto_increment,
  `classification_id` mediumint(5) unsigned NOT NULL default '0',
  `name` varchar(40) NOT NULL default '',
  PRIMARY KEY  (`classification_id`),
  KEY `id` (`id`)
) TYPE=MyISAM

#дочерняя к `Directions` и `DirectionClassification`
CREATE TABLE `DirectionAliases` (
  `alias_id` mediumint(5) unsigned NOT NULL auto_increment,
  `classification_id` mediumint(5) unsigned NOT NULL default '0',
  `direction_id` mediumint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (`alias_id`)
) TYPE=MyISAM

#родительская относительно `DirectionAliases` и `Links`
CREATE TABLE `Directions` (
  `id` mediumint(5) unsigned NOT NULL auto_increment,
  `url_id` mediumint(5) unsigned NOT NULL default '0',
  `lang_id` mediumint(5) unsigned NOT NULL default '0',
  `direction_id` mediumint(5) unsigned NOT NULL default '0',
  `link` varchar(255) NOT NULL default '',
  `direction` varchar(64) NOT NULL default '',
  PRIMARY KEY  (`direction_id`),
  KEY `id` (`id`)
) TYPE=MyISAM

#дочерняя к `Directions`(по полю lang_id = language_id), вообще есть еще одна таблица по primary _key - language_id, ноя думаю нет #надобности ее юзать, и к таблице `BaseClassification`
CREATE TABLE `Aliases` (
  `alias_id` mediumint(5) unsigned NOT NULL auto_increment,
  `classification_id` mediumint(5) unsigned NOT NULL default '0',
  `language_id` mediumint(5) unsigned NOT NULL default '0',
  PRIMARY KEY  (`alias_id`)
) TYPE=MyISAM

#родительская относительно `Aliases`
CREATE TABLE `BaseClassification` (
  `id` mediumint(5) unsigned NOT NULL auto_increment,
  `classification_id` mediumint(5) unsigned NOT NULL default '0',
  `name` varchar(40) NOT NULL default '',
  PRIMARY KEY  (`classification_id`),
  KEY `id` (`id`)
) TYPE=MyISAM

#дочерняя к `Directions`
CREATE TABLE `Links` (
  `id` mediumint(5) unsigned NOT NULL auto_increment,
  `url_id` mediumint(5) unsigned NOT NULL default '0',
  `lang_id` mediumint(5) unsigned NOT NULL default '0',
  `direction_id` mediumint(5) unsigned NOT NULL default '0',
  `link_id` mediumint(5) unsigned NOT NULL default '0',
  `link` varchar(255) NOT NULL default '',
  `remark` varchar(128) default NULL,
  `operation_date` datetime NOT NULL default '0000-00-00 00:00:00',
  PRIMARY KEY  (`link_id`),
  KEY `id` (`id`)
) TYPE=MyISAM


если что-то не совсем понятно объясню smile




--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Akina
Дата 20.8.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



А почему where, a не join?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Bulat
Дата 21.8.2007, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Akina, вообще есть один вариант и с join, однако ранее мне максимум приходилось сцеплять порядка трех последовательные таблицы, а здесь их целых пять, поэтому выложил без оптимизации. smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 21.8.2007, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Мог бы конечно выложить что-нибудь типа ...FROM (table1 inner join table2 using (column) ).... но в оптимизации запросов навык не большой, боюсь нарваться на жуткую критику smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Akina
Дата 21.8.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Bulat @  21.8.2007,  10:09 Найти цитируемый пост)
ранее мне максимум приходилось сцеплять порядка трех последовательные таблицы, а здесь их целых пять

Да хоть двадцать - какая разница?

Цитата(Bulat @  21.8.2007,  10:54 Найти цитируемый пост)
Мог бы конечно выложить что-нибудь типа ...FROM (table1 inner join table2 using (column) ).... но в оптимизации запросов навык не большой, боюсь нарваться на жуткую критику

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

В общем, надо смотреть EXPLAIN


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Bulat
Дата 22.8.2007, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Цитата(Akina @  21.8.2007,  15:33 Найти цитируемый пост)
Да хоть двадцать - какая разница?

разница в быстродействии, оптимизация нужна для того, чтобы запрос отрабатывал гораздо быстрее, чем меньше последовательных таблиц, тем проще с оптимизацией smile


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Akina
Дата 22.8.2007, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Bulat @  22.8.2007,  10:13 Найти цитируемый пост)
чем меньше последовательных таблиц, тем проще с оптимизацией

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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Bulat
Дата 22.8.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

Репутация: нет
Всего: 57



Akina, сенкс за explain, очень важную инфу в итоге нашел относительно KEY, как-то раньше я не придавал особого значения внешним ключам.  smile 

Вот только относительно порядка связывания таблиц не совсем разобрался, да и в манах как правило все довольно тривиально, хотелось бы ссылку на что-нить менее тривиальное  smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Akina
Дата 22.8.2007, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Bulat @  22.8.2007,  11:26 Найти цитируемый пост)
в манах как правило все довольно тривиально

А все и есть тривиально.

Открываем MySQL Help, находим раздел 5.2. "Оптимизация SELECT и других запросов". Читаем.




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.