(no subject)
Aug. 18th, 2011 09:44 pmДавно хотел вербализовать эту идею, да всё случая не было.
Нас спрашивают: "откуда возник ритуал, запрещающий ставить пустые бутылки на стол?".
Мы отвечаем. Это сродни индексированию в реляционных базах данных, где значения NULL не включаются в индекс по этим значениям. То есть, выборка "table.field = some_value" может использовать этот индекс (так как условие является всегда ложным, если some_value это NULL). Иногда даже специально делают индексы по избранным строкам, делая индекс по функции, принимающей значение NULL на неинтересных строках. Был обрадован, когда узнал, что в постгресе это не нужно, и у индекса есть своя where-часть.
Так вот, когда человек думает "винца, что ли, наебнуть?", он кагбэ выполняет " select * from table where bottle_contents='wine' " (заметьте ещё одну параллель -- table и там, и тут).
Ну и вот скажите, не проще ли заранее убрать из выборки те бутылки, в которых bottle_contents явно не удовлетворит никакому разумному выбору? Проводя нехитрый изоморфизм, наливать из бутылки не захочется только в том случае, если её bottle_contents равно NULL.
Потому и убирают из индекса.
Так-то!
Нас спрашивают: "откуда возник ритуал, запрещающий ставить пустые бутылки на стол?".
Мы отвечаем. Это сродни индексированию в реляционных базах данных, где значения NULL не включаются в индекс по этим значениям. То есть, выборка "table.field = some_value" может использовать этот индекс (так как условие является всегда ложным, если some_value это NULL). Иногда даже специально делают индексы по избранным строкам, делая индекс по функции, принимающей значение NULL на неинтересных строках. Был обрадован, когда узнал, что в постгресе это не нужно, и у индекса есть своя where-часть.
Так вот, когда человек думает "винца, что ли, наебнуть?", он кагбэ выполняет " select * from table where bottle_contents='wine' " (заметьте ещё одну параллель -- table и там, и тут).
Ну и вот скажите, не проще ли заранее убрать из выборки те бутылки, в которых bottle_contents явно не удовлетворит никакому разумному выбору? Проводя нехитрый изоморфизм, наливать из бутылки не захочется только в том случае, если её bottle_contents равно NULL.
Потому и убирают из индекса.
Так-то!