Для всех тех, кто сказал, что колонна - пустая трата пространства:
Double Duty не очень хорошая вещь в базе данных. Ваша основная цель должна быть ясность. Многие системы, инструменты, люди будут использовать ваши данные. Если вы замаскируете значения, спрятав значение в других столбцах, вы НАЧИНАЕТЕ, что другая система или пользователь ошибаются.
И тот, кто считает, что это экономит место, совершенно неправ.
Вам понадобятся два индекса в этом столбце даты ... один будет на основе функций, как предлагает OMG. Это будет выглядеть так:
NVL (Date_finished, TO_DATE ('01 -JAN-9999 '))
Таким образом, чтобы найти незавершенные задания, вам нужно обязательно правильно написать предложение where
Это будет выглядеть так:
WHERE
NVL (Date_finished, TO_DATE ('01 -JAN-9999 ')) = TO_DATE ('01 -JAN-9999')
Да. Это так ясно. Это совершенно лучше, чем
WHERE
IS_Unfinished = 'ДА'
Причина, по которой вам нужно иметь второй индекс в том же столбце, заключается в КАЖДОМ ДРУГОМ запросе на эту дату ... вы не захотите использовать этот индекс для поиска работы по дате.
Итак, давайте посмотрим, чего вы добились с предложением OMG и др.
Вы использовали больше места, вы запутали смысл данных, вы допустили ошибки с большей вероятностью ... ПОБЕДИТЕЛЬ!
Иногда кажется, что программисты все еще живут в 70-х годах, когда МБ на жестком диске был первоначальным взносом на дом.
Вы можете сэкономить место, не теряя при этом ясности. Сделайте Is_unfinished либо Y, либо NULL ... ЕСЛИ , вы будете использовать только этот столбец, чтобы найти «работу». Это сохранит этот индекс компактным. Он будет только размером с незавершенные строки (таким образом вы будете использовать неиндексированные нули вместо того, чтобы ими завинчивать). Вы помещаете немного места в свой стол, но в целом это меньше, чем ФБР. Вам нужен 1 байт для столбца, и вы будете индексировать только незаконченные строки, так что «небольшая часть работы и, вероятно, останется довольно постоянной. ФБР понадобится 7 байтов для КАЖДОГО РЯДА, пытаетесь ли вы найти их или нет. Этот индекс будет соответствовать размеру таблицы, а не только размеру незавершенных заданий.
Ответ на комментарий OMG
В своем комментарии он / она заявляет, что для поиска незавершенных работ вы просто используете
WHERE date_finished IS NULL
Но в своем ответе он говорит
Вы можете создать индекс на основе функции, чтобы обойти значения NULL, не индексируемые
Если вы перейдете по ссылке, на которую он указывает вам, используя NVL для замены нулевых значений каким-либо другим произвольным значением, тогда я не уверен, что еще можно объяснить.