Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: ТОП популярных вопросов

В первую очередь, обратите пожалуйста внимание на FAQ:Получение доступа и использование документации

Раз Вы здесь, то посмотрите еще FAQ: Как мне оформить свое сообщение?

P.S. Раньше все было в одном сообщении, теперь разбросано по нескольким. Старые номера, которые могли быть указаны в сообщениях, перекочевали на новые места:

1. Где можно скачать Oracle? Общие вопросы N1
2. Подскажите среду разработки для Oracle. Общие вопросы N2
3. Как создать автоинкрементное поле, поле-счетчик? SQL, PL/SQL N1
4. Почему в своем pl/sql-коде (представлении/процедуре/триггере/пакете) не удается использовать чужой объект - выдается ошибка ORA-00942 table or view does not exist? Общие вопросы N7
5. Как вернуть запрос из функции? SQL, PL/SQL N4
6. Как обойти мутирование таблиц? SQL, PL/SQL N7
7. Для чего нужна таблица SYS.DUAL? Общие вопросы N6
8. Почему не получается сравнение с пустой строкой? Общие вопросы N8
9. Мне нужно создать из процедуры или пакета PL/SQL временную таблицу, поработать с ней а затем удалить. Как? SQL, PL/SQL N8
10. Трассировка сессий: как получить список запросов, выполняемых сессией (моей, чужой) в Oracle? Общие вопросы N4
11. Как запросом получить требуемое количество записей? SQL, PL/SQL N3
12. Как в PL/SQL работать с массивами? SQL, PL/SQL N9
13. Как в Oracle получить запросом данные из других не-Oracle баз данных? Администрирование и настройка N2
14. Как получить все значения одного поля в одной строке? SQL, PL/SQL N5
15. Где Oracle хранит метаданные о своих объектах? Как получить запросом список пользователей, ролей, объектов БД, скрипт на создание объектов БД? Общие вопросы N5
16. Как перенести базу данных Oracle на другую машину? Как создать копию БД Oracle? Администрирование и настройка N1
17. Как уменьшить размер временного табличного пространства (temporary tablespace) TEMP? Администрирование и настройка N3
18. Как получить историю команд для SQL*Plus, RMan и т.п. на и т.п. на Unix, Linux терминалах? Общие вопросы N3
Ответ: SQL, PL/SQL

1. Вопрос. Как создать автоинкрементное поле, поле-счетчик? Какой существует аналог IDENTITY, AUTOINCREMENT?
Ответ. Воспользоваться таким объектом БД как SEQUENCE: FAQ: Автоинкрементное поле

2. Вопрос. Неуникальные строки, строки-дубликаты: как найти неуникальные строки в таблице, как удалить лишние строки и оставить только уникальные?
Ответ. FAQ: Поиск и удаление строк - дубликатов.

3. Вопрос. Как запросом получить требуемое количество записей?
Ответ.
  • Воспользоваться представлениями из словаря БД вроде ALL_OBJECTS, DBA_OBJECTS.
  • Создать свою таблицу с количеством записей не меньше требуемого.
  • Написать процедуру, возвращающую объектную таблицу с указанным количеством записей.
    Пример обсуждения: select натуральный ряд. Статья в Oracle Magazine: Turning On Pivot Tables.

    4. Вопрос. Как вернуть запрос из функции?
    Ответ. Стандартным средством Oracle для возврата выборки из процедуры/функции является работа с REFCURSOR''ом: FAQ: Курсор(select) из хранимых процедур, функций. Если требуется использовать функцию в секции FROM запроса, то следует воспользоваться: FAQ: Запрос из функции, FAQ: Запрос из функции 2

    5. Вопрос. Как получить все значения одного поля в одной строке, через разделители?
    Ответ. Нужна помощь в составлении запроса., Результат SELECT-а в одну строку, Как получить значения всех строк определенного столбца в одной строке?, недокументированная функция wmsys.WM_CONCAT().
    Обратите внимание на следующий вопрос:

    6. Вопрос. Можно ли написать собственную агрегирующую функцию, например, для конкатенации строк или умножения чисел?
    Ответ. AskTom "Function to concatenate output", “Простые дроби”, “В коробке с карандашами...” или Агрегирующие Функции Определяемые Пользователем.

    7. Вопрос. Как обойти мутирование таблиц? Что означает ошибка ORA-04091 table string.string is mutating, trigger/function may not see it?
    Ответ. Один из примеров: FAQ: Мутирование таблиц

    8. Вопрос. Временные таблицы: существуют ли они в Oracle, как создать временную таблицу из процедуры или пакета PL/SQL, поработать с ней а затем удалить. Как?
    Ответ. В Oracle для этих целей используются временные таблицы, но их поведение и применение отличается от других SQL-серверов. FAQ: Временные таблицы

    9. Вопрос. Как в PL/SQL работать с массивами?
    Ответ. Под массивами могут подразумеваться PL/SQL-таблицы или объектные типы-таблицы.
    Oracle® Database PL/SQL User''s Guide and Reference 10g Release 2
    5. Using PL/SQL Collections and Records
    //http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261/collections.htm#i26701

    10. Вопрос. Как проверить, что строка символов является числом?
    Ответ. Отсечение цифр от букв....., Сортировка строки как числа, Можно ли выбрать только те значения, которые являются числами, Ошибка с To_Number.
  • Вопрос: Вопросы по технологиям InterSystems

    Коллеги, привет!

    Нам нужна ваша помощь:
    Собираем для конкурсов и тестов вопросы и ответы по технологиям InterSystems.

    Вопросы могут быть простые, средние и сложные.

    Пример простого вопроса:
    Напишите результат вычисления выражения ObjectScript 1+2*3:
    Ответ:
    9 *
    8
    7
    6

    Пример среднего вопроса:
    В данном примере вызова метода: set sc=oref.Square(length, width, .square) какой из параметров передаётся по ссылке?
    Ответ:
    length
    width
    square *
    ни одного

    Пример сложного вопроса:
    Что появится на экране после выполнения следующей последовательности команд:
    Ответ:
    set a="10 яблок", b="12 яблок" write a>b

    false
    0 *
    <COMMAND>

    Пришлите пожалуйста ваши вопросы

    Через неделю огласим список самых "плодовитых" авторов.
    Лучшего автора пригласим на Школу Инноваций бесплатно (или еще что-нибудь предложим хорошее и поближе по времени).

    Заранее большое спасибо!

    Блог InterSystems на Хабре
    Каталог статей по технологиям InterSystems
    Видеоканал InterSystems Russia
    Группа Isc Meetup в Facebook
    Группа InterSystems University в Вконтакте
    Твиттер InterSystems Russia
    Ответ:
    Шваров Евгений
    Alexey Maslov
    правда, слышал от коллег, что делать на школах седовласым мампсистам особо нечего, но может и приеду (это не вопрос, вопрос ушёл в форму).

    Ну не знаю) Во всяком случае хакатоны никто не навязывает, и то этот эксперимент касался только последнего вечера и следующего утра. А параллельно идут круглые столы, которые мы собираемся делать более организованными. Остальное - все как раньше: занятия, практика, обсуждения, природа, баня )


    Эх-х...Баня...
    Вопрос: Скопилась пара вопросов

    Добрый день, потихоньку копятся вопросы с которыми надо разбираться.

    1) У меня есть измерение с пользователями :

    Пользователь_ID Начал_Действие Регистрация и т.д.
    1 (null) 20150101 ...
    2 (null) 20150101 ...
    3 20150102 20150101 ...
    4 (null) 20150101 ...


    Я хочу посчитать сколько пользователей "Начали Действие" на определенную дату.

    Я могу создать меру с агг-функцией count non empty по ключу "Начал Действие", но я не могу привязать этот ключ к измерению дат.
    Т.к. ругается при процессинге на null'ы в данных.
    Как грамотно решить ситуацию ?


    2) Еще вопрос по last non-empty

    Сколько не перечитал всяких тем, так решения и не нашел.

    Ситуация:
    Создал distinct count меру "Кол-во Регистраций" на ключе "Пользователь_ID" и связал ее с измерением дат по полю "Регистрация", благо оно не бывает null.

    Теперь мы получили кол-во регистраций по датам:

    Дата Кол-во Регистраций
    01.05.2015 5
    02.05.2015 7
    03.05.2015 15
    04.05.2015 4


    Все красиво и хорошо, а теперь добавим меру "Потратили Денег" и отфильтруем чтобы только те кто зарегистрировались 01.05.2015:

    Дата Кол-во Регистраций Потратили Денег
    01.05.2015 5 1000
    02.05.2015 (null) 2000
    03.05.2015 (null) 1333
    04.05.2015 (null) 3222


    Вопрос:
    Как создать такой Calculated Member, чтобы при фильтрации пользователей по дате регистрации получалось:

    Дата Кол-во Регистраций Потратили Денег
    01.05.2015 5 1000
    02.05.2015 5 2000
    03.05.2015 5 1333
    04.05.2015 5 3222


    Т.е. чтобы всегда показывалось значение на выбранную дату.

    Надеюсь все объяснил понятно, поделитесь пожалуйста опытом люди добрые.
    Ответ: WarAnt,

    Я ведь так и сделал и описал это подробно в ответе Старику.
    И засада вся теперь в том, что фильтруя даты регистрации по отдельному измерению я получаю:

    Фильтр по второму измерению дат(по регистрациям)
    01.05.2015


    Обычное измерение дат Кол-во Регистраций Трата Бабла
    01.05.2015 333 40000
    02.05.2015 (null) 30000
    03.05.2015 (null) 20000
    04.05.2015 (null) 10000



    Babona,

    По поводу Scope - надо покурить, я его не разу не трогал.
    Но вроде бы мне не в будущее надо тянуть, а заполнить последним не нулевым существующую дату.
    Пробовал через tail, еще есть варианты с рекурсией - но они на MDX описаны, а именно под CM не нашел или не работало.


    Остается вопрос:

    3) И еще вопрос возник:
    Сделал куб невидимым, но его перспективы остаются видимыми. Можно ли их тоже скрыть ? Не нашел такого свойства у них, и не загуглилось ничего.
    Вопрос: Вопросы на собеседованиях для сеньоров

    Пельмени уже создавал тему "Вопросы на собеседованиях для юниоров".
    Собственно, я созрел для создания этой темы "Вопросы на собеседованиях для сеньоров" - кто что подскажет?

    Кто поделится вопросами и ответами, и что почитать по теме каждого вопроса?
    Ответ:
    Владислав Колосов
    уровень зарплаты никак не зависит ни от квалификации, ни от качества работы. Так что Вы правы насчет джуниора.
    В целом верно, хотя это уже тема другой беседы
    Но данном случае это не имеет значения, я же писал про другое, про зависимость квалификации и качества работы от зарплаты, ИМХО в контектсе вопроса ТС именно это важно.
    Вопрос: Производительность SQL сервера ВОПРОС!

    Здравствуйте.
    На новом месте работы поставили задачу разобраться с производительностью сервера SQL. Сказали, что пользователи жалуются, «тормозит, плохо работает». Я сам в БД не работаю, запросы не создаю и т.д., все со слов.
    Исходные данные на момент написания:

    Сервер:

    Win server 2008R2 x64 – 125 Gb ОЗУ – Xeon E5 4640 x2
    MS SQL 2012 (количество баз – 30, размер всего 900 Гб)

    Информация по БД основная, без секундных метрик и данных о нагрузке в единицу времени:

    Data Base Pages – 11 134 865
    Buffer Cache Hit Ratio – 100 %
    Target Pages – 261 914 624
    Cache objects – 96 346
    Cache pages – 885 283

    Для мониторинга обстановки основные показатели интегрированы в сервер мониторинга и выводы следующие:
    Дисковая подсистема и процессорный пул не сильно нагружаются. То есть тех ресурсов что есть вполне хватает. А вот с оперативной памятью вопрос. Для SQL выделено 100 Gb, он «съел» их полностью. Причем было выделено 80, добавили +20 за неделю он их «прикончил».
    В связи с этим вопрос, какой оптимальный объем ОЗУ (ориентировочно) мне нужен в данной ситуации (я в курсе, что это очень грубо, без анализа количества запросов и других параметров работы пользователей с БД) и что посмотреть в первую очередь для некой оптимизации БД, без глобальных изменений.
    Буду рад ответить на уточняющие вопросы. Спасибо большое заранее.
    Ответ:
    Гавриленко Сергей Алексеевич
    dezhnevo
    нужные ресурсы, типа этого и далее внутри на ссылки MSDN
    Когда вы осознаете, что все, что там написано вроде как и по делу, но работает, когда база нормально сдалена изначально, и вам далеко не факт, что поможет, то велкам бэк.
    А мне очень понравился самый первый комментарий с огромным количеством вопросов к авторам этой статьи, который заканчивается словами:
    Я выдохся. Вопросы еще есть, а статья ни о чем.
    Вопрос: Вопрос по временным таблицам.

    Возник вопрос, что лучше использовать временную таблицу, либо реальную таблицу.
    Задача такая, когда пользователь открывает документ то данные должны поступить в некую промежуточную таблицу. Если использовать ту же таблицу то придется использовать некий ID сессии чтобы различать открытые документы пользователей и при больших объемах данных изменения в документе будут более затратными.
    Так вот, идеи такие:
    1)входе в программу создать временную таблицу ## и в нее по мере необходимости помещать открытые документы. При выходе из программы сессия рвется и соответсвтенно данные удаляются.
    2)создать 1 реальную таблицу на всех пользователей и туда помещать документы открытые. Там появится тогда номер сеанса чтобы каждый пользователь видел только свои документы. + Есть момент что если пользователь вышел из программы во время работы с документом то данные в таблице остануться и со временем там накопится куча ненужного хлама.
    3) при входе в программу создавать таблицу например Docs+'ID сессии'. Пользователь работает в ней, а при выходе из программы то создать триггер который будет удалять данные таблицы.

    Как считаете, какой метод более рационален?
    Ответ:
    Smoke999
    А не получить кучу не нужной информации.

    Если ваш уровень знаний низок, то это не значит, что информация ненужная.

    Smoke999
    Вроде здесь форум, где можно задать вопрос и получить какой-то ответ.

    Вот вы и получили ответы. Если они вам не нравяться, то дело в вопросе наверное

    Smoke999
    я просто не понимаю зачем отвечать на вопросы которые не задают.

    Потому что "Вроде здесь форум". Здесь ведут диалог, а не монолог.
    Вопрос: Академ вопрос

    Всем добрый вечер.

    Недавно отвечал на тесты, для соискателей.
    Был там вот такой вопрос:

    Есть таблица T, с произвольным набором значений в поле id, как одним select получить крайние значения от заданного значения id на входе.
    Пример:
    T.id =
    12
    34
    76
    89
    1234
    1254
    6789
    3456

    На вход для select подаем id=1254, на выходе должны быть два значения 1234 и 6789

    Я предоставил следующий ответ

    Select MIN(id) f0 from T Where id>1254
    UNION ALL
    Select MAX(id) f0 from Where id<1254

    Судя по отзыву ответ посчитали неправильным.

    Вопрос из любопытства: как можно ответить на данный вопрос?

    Заранее спасибо
    Ответ:
    Winnipuh
    MasterZiv
    Select MIN(id), MAX(id) from T Where id in (12,34,76,89,1234,1254,6789,3456)
    

    "крайние значения от заданного значения id на входе." ?

    да все ок,
    ведь крайний -- это или находящийся с краю, или экстремальный.
    именно по этой причине у любого списка значений "краев" всегда 2 (могут и совпадать).
    но т.к. нам тут втирают, что упорядоченность отсутствует, о краях говорить не приходится.
    остаются экстремумы -- min и max.
    ---
    супер-составители вопросов сперва должы с русским разобраться, если хотят, чтоб их понимали.
    еще раз: то, что они хотят -- это "соседние" значения.
    и для определения соседства необходимо определение порядка.
    нет порядка -- нет соседства. все!
    Вопрос: Вопрос про повторяющиеся записи

    USE worktime
    DECLARE @from datetime
    DECLARE @to datetime
    DECLARE @CheckNumber datetime
    SELECT @from='2016-06-22 00:00:01.000',@to='2016-06-22 23:59:59.000',@CheckNumber=215
    SELECT distinct
    p.[Name],
    me.EventTime ,
    me.CheckNumber ,
    me.TabelNumber ,
    case when cc.isOut=0 THEN 'Вход' ELSE 'Выход'END,
    cp.NameCheckPoint,
    is1.[Description]
    FROM _MoveEvent me WITH (NOLOCK)
    INNER JOIN _Person p WITH (NOLOCK) ON p.TabelNumber=me.TabelNumber
    INNER JOIN _Regulation r WITH (NOLOCK) ON r.UIDStaff=p.UIDStaff and r.StartDate<=@from
    INNER JOIN _CheckPointContent cc WITH (NOLOCK) ON me.CheckNumber=cc.NumberCheck
    INNER JOIN _CheckPoint cp WITH (NOLOCK) ON cc.IDCheckPoint=cp.ID
    INNER JOIN _GroupPointContent gpc WITH (NOLOCK) ON gpc.NameCheckPoint=cp.NameCheckPoint
    INNER JOIN _InterbaseSource is1 WITH (NOLOCK) ON cp.IDInterbaseSource=is1.ID AND me.IDInterbaseSource=is1.id
    WHERE
    me.EventTime BETWEEN @from AND @to
    --AND me.CheckNumber in (9, 18, 19, 20, 31, 42, 53, 64, 75, 79, 86, 92, 97, 105, 118, 131, 144, 164, 177, 270, 278, 281, 289, 313, 314, 324, 331, 342, 360, 371, 412, 423, 440, 465, 468, 476, 633, 644, 681, 692, 703, 816, 827, 1059, 1070, 1332, 1438, 1449, 1489, 1500, 1636, 1647, 1677, 1688, 1795, 1806, 1817, 1828, 1839, 1850, 1861, 1973, 1988, 1999, 2066, 2077, 2087, 2091, 2098, 2102, 2119, 2130, 2141, 2152, 2234, 2289, 2300, 2355, 2366, 2471, 2482, 2498, 2773, 2784, 3028, 3039, 3076, 3087, 3190, 3201, 3375, 3397, 3664, 3675, 3827, 4148, 4159, 4253, 4264, 4276, 4287, 4298, 4309, 4320, 4331, 4342, 4353, 4364, 4375, 4386, 4397, 4408, 4419, 4420, 4430, 4431, 4441, 4452, 4463, 4474, 4485, 4496, 4507, 4518, 4529, 4562, 4573, 4584, 4595, 4606, 4617, 4628, 4639, 4672, 4694, 4716, 4727, 4738, 4749, 4705, 4683, 4782, 4793, 5676, 5687, 5698, 5709, 5720, 5731, 5742, 5753, 7859, 7826, 7837, 9785, 9796, 10317, 10328, 10374, 10385, 10894, 10905, 12507, 12518, 13024, 13035, 13046, 13057)
    --AND me.CheckNumber in (5817)
    --AND p.[Path] LIKE '\ВВ\%'
    and me.TabelNumber in (1020576)


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

    К сообщению приложен файл. Размер - 129Kb
    Ответ:
    rust1983
    USE worktime
    DECLARE @from datetime
    DECLARE @to datetime
    DECLARE @CheckNumber datetime
    SELECT @from='2016-06-22 00:00:01.000',@to='2016-06-22 23:59:59.000',@CheckNumber=215
    SELECT distinct
    p.[Name],
    me.EventTime ,
    me.CheckNumber ,
    me.TabelNumber ,
    case when cc.isOut=0 THEN 'Вход' ELSE 'Выход'END,
    cp.NameCheckPoint,
    is1.[Description]
    FROM _MoveEvent me WITH (NOLOCK)
    INNER JOIN _Person p WITH (NOLOCK) ON p.TabelNumber=me.TabelNumber
    INNER JOIN _Regulation r WITH (NOLOCK) ON r.UIDStaff=p.UIDStaff and r.StartDate<=@from
    INNER JOIN _CheckPointContent cc WITH (NOLOCK) ON me.CheckNumber=cc.NumberCheck
    INNER JOIN _CheckPoint cp WITH (NOLOCK) ON cc.IDCheckPoint=cp.ID
    INNER JOIN _GroupPointContent gpc WITH (NOLOCK) ON gpc.NameCheckPoint=cp.NameCheckPoint
    INNER JOIN _InterbaseSource is1 WITH (NOLOCK) ON cp.IDInterbaseSource=is1.ID AND me.IDInterbaseSource=is1.id
    WHERE
    me.EventTime BETWEEN @from AND @to
    --AND me.CheckNumber in (9, 18, 19, 20, 31, 42, 53, 64, 75, 79, 86, 92, 97, 105, 118, 131, 144, 164, 177, 270, 278, 281, 289, 313, 314, 324, 331, 342, 360, 371, 412, 423, 440, 465, 468, 476, 633, 644, 681, 692, 703, 816, 827, 1059, 1070, 1332, 1438, 1449, 1489, 1500, 1636, 1647, 1677, 1688, 1795, 1806, 1817, 1828, 1839, 1850, 1861, 1973, 1988, 1999, 2066, 2077, 2087, 2091, 2098, 2102, 2119, 2130, 2141, 2152, 2234, 2289, 2300, 2355, 2366, 2471, 2482, 2498, 2773, 2784, 3028, 3039, 3076, 3087, 3190, 3201, 3375, 3397, 3664, 3675, 3827, 4148, 4159, 4253, 4264, 4276, 4287, 4298, 4309, 4320, 4331, 4342, 4353, 4364, 4375, 4386, 4397, 4408, 4419, 4420, 4430, 4431, 4441, 4452, 4463, 4474, 4485, 4496, 4507, 4518, 4529, 4562, 4573, 4584, 4595, 4606, 4617, 4628, 4639, 4672, 4694, 4716, 4727, 4738, 4749, 4705, 4683, 4782, 4793, 5676, 5687, 5698, 5709, 5720, 5731, 5742, 5753, 7859, 7826, 7837, 9785, 9796, 10317, 10328, 10374, 10385, 10894, 10905, 12507, 12518, 13024, 13035, 13046, 13057)
    --AND me.CheckNumber in (5817)
    --AND p.[Path] LIKE '\ВВ\%'
    and me.TabelNumber in (1020576)


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


    Да что вы привезались к SQL запросам.
    Ну не могут они делать некоторые вещи (разве только через одно место)
    Создайте Рекорд сет, а там творите что угодно.
    Чё вы привезались к SQL ну не может он делать некоторые вещи.
    И вообще имея "толстого клиента" лучьше делать на нем.
    Уже замучали своими SQL портянками.
    С уважением.
    Вопрос: подскажите по индексам, набор накопившихся вопросов

    1) index(a,b,c)
    order by a desc, b desc , c desc
    по индексу будет работать?


    2) select count(*) from table where did=1 => using index, using where
    select count(id) from table where did=1 =>using index collation
    did определен not null (разумеется)

    2.1) если в explain запросе идет index collation, это значит что данные берутся чисто из индекса?
    2.3) если так, то почему при полностью загруженном в память индексе оно может выполяться дольше чем using index, using where ?
    2.4) почему в первом варианте не используется индекс из памяти?


    3) index (a,b,c,d)
    select * from table where a=1

    3.1) теоретически насколько я помню из курсов по БД, в такой ситуации нет смысла делать index(a), т.к. он и так присутствует в составном, верно?
    3.2) Почему index(a) отрабатывает заметно быстрее чем index(a,b,c,d) при том что в обоих случаях длина индекса одна?


    4) как должны быть проставлены индексы на 2 страницах что бы выборка сработала по пересечению индексов и была взята из памяти? я точно не помню как это выглядит, но что-то такое есть (аналог с index collation но для 2 таблиц)


    5) myisam vs innodb. прибегал админ по БД, настроил оба движка вроде как положено, но доступа к настройкам не дал и не показал их.
    myisam не нравится тем что лочит всю таблицу при хитрых апдейтах, которые длятся по 2-3 минуты, а это на рабочем сайте не очень, innodb такой проблемы не создает, но и работает по 15-20 минут
    плюс innodb на прямых выборках с легкими джоинами работает на порядок (не шучу) дольше.
    вопрос - это нормальное соотношение производительности или надо пойти и выдрать тому админу руки за настройку innodb ?
    myisam при чем после его настройки прям залетал, innodb тоже ускорился но сравнение сильно не в его пользу
    в принципе я знаю что myisam рулит на чтении, но удивил РАЗМЕР руления и так же тот факт что запись тоже не кисло тормозит.
    ВСЕ апдейты проходят через джоины по индексам, так что в этом плане тут вопрос по теме
    Ответ: 1) index(a,b,c)
    order by a desc, b desc , c desc
    по индексу будет работать?

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

    2) select count(*) from table where did=1 => using index, using where
    select count(id) from table where did=1 =>using index collation
    did определен not null (разумеется)

    Не знаю, что тут написать, могу только прокоментировать.
    2.1) если в explain запросе идет index collation, это значит что данные берутся чисто из индекса?

    Если в плане есть использование индекса, это не обязательно значит, что все данные берутся только из индекса.
    Так что вопрос странен.

    2.3) если так, то почему при полностью загруженном в память индексе оно может выполяться дольше чем using index, using where ?

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

    2.4) почему в первом варианте не используется индекс из памяти?

    Не существует индексов в памяти.


    3) index (a,b,c,d)
    select * from table where a=1

    3.1) теоретически насколько я помню из курсов по БД, в такой ситуации нет смысла делать index(a), т.к. он и так присутствует в составном, верно?

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

    3.2) Почему index(a) отрабатывает заметно быстрее чем index(a,b,c,d) при том что в обоих случаях длина индекса одна?

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

    Вообще, скорость (т.е. время) выполнения запроса не может являться критерием его оптимальности, это только один из главных целевых параметров.


    4) как должны быть проставлены индексы на 2 страницах что бы выборка сработала по пересечению индексов и была взята из памяти? я точно не помню как это выглядит, но что-то такое есть (аналог с index collation но для 2 таблиц)

    Нет индексов в памяти. Не бывает.
    Пересечение иднексов -- тоже достаточно сомнительная стратегия выполнения запросов, она используется в некоторых СУБД, но в больших промышленных практически не используется. Сложно предстазать трудоёмкость и
    эффективность.


    5) myisam vs innodb. прибегал админ по БД, настроил оба движка вроде как положено, но доступа к настройкам не дал и не показал их.
    myisam не нравится тем что лочит всю таблицу при хитрых апдейтах, которые длятся по 2-3 минуты, а это на рабочем сайте не очень, innodb такой проблемы не создает, но и работает по 15-20 минут


    Прежде всего myisam нетранзакционен и работает без кэширования данных.
    Это позволяет с полной уверенностью утверждать, что mySQL + MyISAM --это вообще не СУБД, а хрень какая-то.
    Потому как две основные технологии СУБД -- кэширование и индексирование. MyISAM может кэшировать только индексные записи.


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


    В первом приближении -- надо настроить правильно, да. Вообще, MyISAM & Inno - антогонисты, им обоим нужен
    кэш, и совместно использовать они их не могут. Но возможно и просто тупо наличие неоптимизированных запросов.
    Их надо тюнить отдельно, для одного и другого.



    myisam при чем после его настройки прям залетал, innodb тоже ускорился но сравнение сильно не в его пользу
    в принципе я знаю что myisam рулит на чтении, но удивил РАЗМЕР руления и так же тот факт что запись тоже не кисло тормозит.


    Как раз наоборот, рулит на чтение Inno, а MyISAM рулит на запись . Но при этом что и куда он записывает -- никто не знает, никто не гарандирует Durability на нём.


    Ну и твоё сравнение одного движка с другим скорее некорректно и субъективно, потому что чтобы нормально сравнивать, нужно очень хорошо постараться.
    Вопрос: Вопрос про поле формата DateTime!

    Здравствуйте всем!

    Подскажите, пожалуйста, ответ на следующий вопрос.
    Завел в таблице два поля формата DateTime.
    Два коротких вопроса про них:

    1. Как придать автоматически через программу данный определенный формат - т.е. пустой, чтобы пользователь набивал.
    { . . : } - я понимаю такой должен быть - видел в интернет. Сначала идут точки -это дата, а потом двоеточие это идет время.

    Также для второго поля.

    2. А потом нужно посчитать разницу во времени. Простым вычитанием? Т.е. одно поле допустим 28.02.2017 12:35
    второе: 04.02.2017 13.50

    Получаем разность. Как?

    Спасибо большое за ответ.
    Ответ:
    dima_18
    Здравствуйте всем!

    Подскажите, пожалуйста, ответ на следующий вопрос.
    Завел в таблице два поля формата DateTime.
    Не ыорамата, а типа. У полей таблиц нет форматов.
    Два коротких вопроса про них:

    1. Как придать автоматически через программу данный определенный формат - т.е. пустой, чтобы пользователь набивал.
    { . . : } - я понимаю такой должен быть - видел в интернет. Сначала идут точки -это дата, а потом двоеточие это идет время.
    Полям - никак ибо, как уже написано, у полей нет формата. В контролах для работы с данными полями свойство value = {}

    Также для второго поля.

    2. А потом нужно посчитать разницу во времени. Простым вычитанием? Т.е. одно поле допустим 28.02.2017 12:35
    второе: 04.02.2017 13.50

    Получаем разность. Как?
    Мрлча. Простым вычитанием. Результат - целое количество секунд.