Многостолбцовый индекс может использоваться для запросов, ссылающихся весь столбцы:
SELECT *
FROM TableName
WHERE Column1=1 AND Column2=2 AND Column3=3
Это может искаться непосредственно с помощью многостолбцового индекса. С другой стороны, самое большее один из индекса отдельного столбца может использоваться (это должно было бы искать все записи, имеющие Column1=1, и затем проверить Column2 и Column3 в каждом из тех).
Запись, размер которой меньше 'PIPE_BUF', должен быть атомарным. Это должно быть не менее 512 байт, хотя легко может быть больше (кажется, в Linux установлено значение 4096).
Предполагается, что вы говорите обо всех полностью совместимых с POSIX компонентах. Например, это неверно для NFS.
Но если вы пишете в файл журнала, который вы открыли в режиме 'O_APPEND', и сохраняете свои строки (включая новую строку) под байтами 'PIPE_BUF', у вас должно получиться несколько писателей в файл журнала без проблем с повреждением. Любые прерывания поступят до или после записи, а не посередине. Если вы хотите, чтобы целостность файла сохранялась после перезагрузки, вам также необходимо вызывать fsync (2)
после каждой записи, но это ужасно для производительности.
Пояснение : прочтите комментарии и ответ Оз Соломона . Я не уверен, что O_APPEND
должен иметь атомарность размера PIPE_BUF
. Вполне возможно, что это просто то, как Linux реализовал write ()
, или это может быть связано с размерами блоков базовой файловой системы.
Вот что говорит стандарт: http://www.opengroup.org/onlinepubs/009695399/functions/pwrite.html .
Если
] O_APPEND
установлен флаг состояния файла, смещение файла должно быть установлено на конец файла перед каждой записью, и никакая промежуточная операция модификации файла не должна происходить между изменением смещения файла и операцией записи.