Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RFpro.ru: Базы данных MySQL


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4487
∙ повысить рейтинг »
Александр Романов [Alexo]
Статус: 5-й класс
Рейтинг: 81
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Базы данных / MySQL

Номер выпуска:505
Дата выхода:18.11.2015, 15:51
Администратор рассылки:F®ost (Администратор)
Подписчиков / экспертов:11 / 4
Вопросов / ответов:3 / 8

Консультация # 53981: БД FireBird. Раньше не приходилось задумываться о безопасности. Сейчас назрел такой вопрос: Как обезопасить БД? Как сделать так, что бы в случае ее похищения нельзя было в нее попасть стандартными средствами (Sysdba:masterkey) ? ...


Консультация # 135356: Здравствуйте! Такая задача: есть таблица сотрудники, в ней 2 поля - имя_сотрудника, дата выхода на работу(dd.mm.yyyy). Вопрос: как написать запрос, чтобы можно было вывести только 3-х первых по дате сотрудников? Спасибо!...
Консультация # 78002: Какой из запросов более быстрее происходит: Select * from table1 WHERE id IN (SELECT par_id FROM table2) ИЛИ Select table.* from table1,table2 WHERE table1.id=table2.par_id...

Консультация # 53981:

БД FireBird. Раньше не приходилось задумываться о безопасности. Сейчас назрел такой вопрос: Как обезопасить БД? Как сделать так, что бы в случае ее похищения нельзя было в нее попасть стандартными средствами (Sysdba:masterkey) ?

Дата отправки: 01.09.2006, 13:02
Вопрос задал: Sniffer
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Архангельский Андрей Германови:

Здравствуйте, Sniffer!

Никак!
Правда в Firebird 2.0 обещали перенести БД пользователей в целевую БД, но похоже что это будет реализовано в Vulcan (т.е. в FB 3.0) - тогда будет возможно.

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

Так что ждемс

Консультировал: Архангельский Андрей Германови
Дата отправки: 01.09.2006, 13:23
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 135356:

Здравствуйте!
Такая задача: есть таблица сотрудники, в ней 2 поля - имя_сотрудника, дата выхода на работу(dd.mm.yyyy).
Вопрос: как написать запрос, чтобы можно было вывести только 3-х первых по дате сотрудников?
Спасибо!

Дата отправки: 04.05.2008, 22:48
Вопрос задал: Usarios
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Игорь Елизаров:

Здравствуйте, Usarios!

Этот запрос отбирает троих с самыми старыми датами

select top 3 name from table order by date_job

Для того, чтобы отобрать три самые свежие записи, надо просто изменить порядок сортировки

select top 3 name from table order by date_job desc
C уважением, Игорь

Консультировал: Игорь Елизаров
Дата отправки: 04.05.2008, 23:21
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Nomadfromx2007:

Здравствуйте, Usarios!
Смотрите примерный запрос, который выбирает 3 самых близких по дате выхода сотрудников.

Приложение:

Консультировал: Nomadfromx2007
Дата отправки: 08.05.2008, 01:34
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 78002:

Какой из запросов более быстрее происходит:
Select * from table1 WHERE id IN (SELECT par_id FROM table2)
ИЛИ
Select table.* from table1,table2 WHERE table1.id=table2.par_id

Дата отправки: 12.03.2007, 19:14
Вопрос задал: Загиров Рустам
Всего ответов: 5
Страница онлайн-консультации »


Консультирует Архангельский Андрей Германови:

Здравствуйте, Загиров Рустам!

Однозначно второй запрос выполняется быстрее, часто в разы

Консультировал: Архангельский Андрей Германови
Дата отправки: 12.03.2007, 19:19
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Ерёмин Андрей:

Здравствуйте, Загиров Рустам!
Второй конечно, особенно если на table1.id определён индекс. Оператор IN вообще довольно долго работает, особенно если таблицы большие. А причина тому - что делается выборка. Любая выборка требует бОльших затрат, нежели прямое условие.

Консультировал: Ерёмин Андрей
Дата отправки: 12.03.2007, 19:27
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Yumata:

Здравствуйте, Загиров Рустам!
В дополнение к предыдущим ответам - не всегда все так однозначно, как в Вашем случае! Иногда лучше проверить! Если Вы работаете с БД InterBase или его клонами - рекомендую воспользоваться великолепной программой IBExpert. Вы можете запустить Ваше SQL-выражение на выполнение и посмотреть время исполнения, и потом принимать решение. Либо программно организовать в цикле выполнение и поставить таймер для вычисления времени...

Консультировал: Yumata
Дата отправки: 12.03.2007, 19:42
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Филатов Евгений Геннадьевич:

Здравствуйте, Загиров Рустам!
В любом случае второй запрос будет выполняться быстрее.
Желательно наличие индекса в таблице table2 по полю par_id - при большом количестве записей скорость может увеличиться в разы, хотя некоторые СУБД после первого подобного запроса оптимизируют записи, и последующие запросы с использованием этого условия могут обрабатываться быстрее, чем первый.
Также можно проиндексировать таблицу table1 по полю id.
В Вашем примере первый запрос выполнится в два этапа - сначала сформируется список par_id из таблицы table2, затем для каждой записи в таблице table1 будет находиться соответствие поля id в списке. Желательно добавить сортировку во второй таблице - ( SELECT par_id FROM table2 ORDER BY par_id ) .
Во втором запросе будут сравниваться значения соответствующих полей в таблицах, и при нахождении соответствия, выводится результат. При наличии индексов, будут сравниваться значения индексов, что при меньшем объеме индекса по сравнению с полными записями, значительно ускорит расчет.
Как вариант предпочтения использования первого запроса можно в случае, когда таблицы находятся на разных серверах (если MS SQL, ORACLE и подобные - сервер возвращает только результат запроса, а не скачивает и обрабатывает всю таблицу на машине пользователя - как Access и другие ) , тогда объем передаваемых данных по каналам связи ( сеть, интернет и т.п. ) может быть значительно меньше, чем если бы таблицы сравнивались по значению полей и качалась бы полная таблица ( тем более, если в table2 указан отбор по условию, не связанный с table1 ) .
С уважением.

Консультировал: Филатов Евгений Геннадьевич
Дата отправки: 12.03.2007, 20:07
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует DragonTusk:

Здравствуйте, Загиров Рустам!
Второй
Select table.* from table1,table2 WHERE table1.id=table2.par_id
Красивее так (если стадарт SQL92 и выше)
SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.par_id

Консультировал: DragonTusk
Дата отправки: 12.03.2007, 23:42
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное