Когда использовать SQLITE_TRANSIENT по сравнению с SQLITE_STATIC?

Вы определенно начнете сталкиваться с проблемами о той таблице на 42 ГБ, как только она больше не умещается в памяти. На самом деле, как только это больше не умещается в памяти, производительность ухудшится чрезвычайно быстро. Один способ протестировать состоит в том, чтобы поместить ту таблицу на другую машину с меньшим количеством RAM и видеть, как плохой это работает.

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

Это неправильно. Partioning (или через функцию в MySQL 5.1 или через то же самое с помощью таблиц MERGE) может обеспечить значительные выигрыши в производительности, даже если таблицы находятся на том же диске.

Как пример, скажем, что Вы выполняете Запросы Select на своей большой таблице с помощью диапазона дат. Если таблица будет цела, запрос будет вынужден просканировать через всю таблицу (и в том размере, даже использование индексов может быть медленным). Преимущество разделения состоит в том, что Ваши запросы будут только работать на разделах, где это абсолютно необходимо. Если каждый раздел составляет 1 ГБ в размере, и Ваш запрос только должен получить доступ к 5 разделам для выполнения себя, объединенная таблица на 5 ГБ намного легче для MySQL иметь дело с, чем версия монстра 42 ГБ.

Одна вещь необходимо спросить себя, то, как Вы запрашиваете данные. Если будет шанс, что Ваши запросы должны будут только получить доступ к определенным блокам данных (т.е. диапазон дат или идентификационный диапазон), разделение некоторого вида окажется выгодным.

я услышал, что существует все еще некоторая ошибочность с разделением MySQL 5.1, особенно связанным с MySQL, выбирая корректный ключ. Таблицы СЛИЯНИЯ могут обеспечить ту же функциональность, хотя они требуют немного больше служебного.

Hope, которая помогает... удачи!

17
задан CL. 18 October 2013 в 06:52
поделиться

1 ответ

Удалить символы 'вокруг? в вашей строке sql.

SQLITE_TRANSIENT указывает SQLite скопировать вашу строку. Используйте это, когда ваша строка (буфер) будет удалена до выполнения запроса.

SQLITE_STATIC сообщает SQLite, что вы обещаете, что указатель, который вы передаете на строку, будет действителен до тех пор, пока запрос не будет выполнен. . Используйте это, если ваш буфер, гм, статический или, по крайней мере, имеет динамическую область, превышающую область привязки.

45
ответ дан 30 November 2019 в 11:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: