Существует несколько различий между временными таблицами (#tmp) и переменными таблиц (@tmp), хотя использование tempdb не является одним из них, как указано в ссылке MSDN ниже.
Как правило, для небольших и средних объемов данных и простых сценариев использования следует использовать табличные переменные. (Это слишком широкое руководство с, конечно, множеством исключений - см. Ниже и в следующих статьях.)
Некоторые моменты, которые следует учитывать при выборе между ними:
Временные таблицы являются реальными таблицами, так что вы можете делать такие вещи, как CREATE INDEXes и т. д. Если у вас есть большие объемы данных, доступ к которым по индексу будет быстрее, тогда временные таблицы - хороший вариант.
Табличные переменные могут иметь индексы с помощью ограничений PRIMARY KEY или UNIQUE. (Если вам нужен неуникальный индекс, просто включите столбец первичного ключа в качестве последнего столбца в ограничении уникальности. Если у вас нет уникального столбца, вы можете использовать столбец идентификаторов.) В SQL 2014 есть не уникальные индексы тоже .
Табличные переменные не участвуют в транзакциях, а SELECT
неявно связаны с NOLOCK
. Поведение транзакции может быть очень полезным, например, если вы хотите выполнить ROLLBACK в середине процедуры, тогда табличные переменные, заполненные во время этой транзакции, будут по-прежнему заполнены!
Временные таблицы могут привести к хранимым процедурам перекомпилируется, возможно часто. Табличные переменные не будут.
Вы можете создать временную таблицу, используя SELECT INTO, которая может быть быстрее написана (хорошо для специальных запросов) и может позволить вам иметь дело с изменением типов данных с течением времени, так как вам не нужно определять ваша временная структура таблицы заранее.
Вы можете передавать табличные переменные из функций, что значительно упрощает инкапсуляцию и повторное использование логики (например, создание функции для разбиения строки на таблицу значений на некотором произвольном разделителе). [тысяча сто тридцать одна]
Использование табличных переменных в пользовательских функциях позволяет более широко использовать эти функции (подробнее см. Документацию CREATE FUNCTION). Если вы пишете функцию, вы должны использовать табличные переменные над временными таблицами, если нет острой необходимости.
Табличные переменные и временные таблицы хранятся в базе данных tempdb. Но для табличных переменных (с 2005 года) по умолчанию используется сопоставление текущей базы данных по сравнению с временными таблицами, которые принимают сопоставление по умолчанию для базы данных tempdb ( ref ). Это означает, что вы должны знать о проблемах сопоставления, если вы используете временные таблицы и ваша база данных сопоставления отличается от базы данных tempdb, что создает проблемы, если вы хотите сравнить данные в временной таблице с данными в вашей базе данных.
Глобальные временные таблицы (## tmp) - это еще один тип временных таблиц, доступных для всех сеансов и пользователей.
Некоторое дальнейшее чтение:
Великий ответ Мартина Смита на dba.stackexchange.com
Часто задаваемые вопросы MSDN о различиях между ними: https://support.microsoft.com/en-gb/kb/305977
MDSN статья в блоге: http://blogs.msdn.com/sqlserverstorageengine/archive/2008/03/30/sql-server-table-variable-vs-local-teilitary-table.aspx
Статья: http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1267047,00.html#
Неожиданное поведение и влияние на производительность временных таблиц и временных переменных: Пол Уайт на SQLblog.com
Попробуйте:
sudo dpkg-reconfigure unity-greeter
Если это не сработает, загрузитесь с живого компакт-диска (при условии, что вы сможете оттуда получить доступ к рабочему столу), создайте резервную копию старых настроек xconfig и скопируйте те из живого компакт-диска.
Изменить на корневой:
sudo su
резервная копия:
mv /media/<Name of your Ubuntu Partion>/etc/X11/Xsession.d/ /media/<Name of your Ubuntu Partion>/etc/X11/old.Xsession.d/
копия:
cp /etc/X11/Xsession.d/ /media/<Name of your Ubuntu Partion>/etc/X11/Xsession.d/
Пожалуйста, сначала удалите любой другой драйвер, а затем установите следующее:
sudo apt-get install nvidia-319 nvidia-settings-319 nvidia-prime
PS: хотя это настольный компьютер, он обнаруживает, что у вашего процессора Intel также есть видеокарта, поэтому это гибридная система, вам нужен пакет nvidia-pime, чтобы он работал правильно, пожалуйста, оставьте свой отзыв, спасибо.
Возможно, вы видите эту, по-видимому, часто встречающуюся проблему с неправильной установкой драйверов Nvidia: Пустой экран после установки ограниченного драйвера nvidia . Удалите, очистите и перенастройте пакеты, как описано в этом вопросе.
Кроме того, вы можете убедиться, что выбранные вами драйверы Nvidia действительно подходят для вашей видеокарты. См. Nvidia Geforce 680 GTX - глюки на экране для получения инструкций о том, как это сделать.
Наконец, это может быть выстрел в темноте, но, как объяснено в , какие графические драйверы сейчас используются на этой карте NVIDIA? , Nvidia X Server на моем ноутбуке мерцает, зависает и ошибки при запуске. Я могу запустить X
, только если я установил проприетарные драйверы Nvidia для моей видеокарты (nvidia-304
) в одном ядре (скажем, 3.2.0-23-generic
), а затем загрузился в другом ядре ( скажем, 3.2.0-57-generic
). Он явно использует какой-то запасной драйвер, и я не могу понять, какой это драйвер, но, похоже, он просто работает.
lspci -v
на строке Драйвера ядра сказал что-то относительно строк " can' t получают доступ к device". так как размер и пропорции соответствуют тем из Плимутской начальной загрузки, я подозреваю, что это использовало драйвер кадрового буфера. Так или иначе на догадке я включил x-удар ppa и 331 драйвер Nvidia. После перезагрузки все казалось прекрасным, но иногда исходная черная экранная проблема представляет себя (см. выше).
– Em Rul
06.05.2020, 05:20
nouveau
doesn' t, кажется, активируются правильно (I' m еще уверенный, что на самом деле происходит). Таким образом, возможно, это ужасное обходное решение из 3-го абзаца может работать на Вас, также.
– PALLAMOLLA SAI
06.05.2020, 05:21