Который быстрее: несколько единственных ВСТАВОК или несколько-строк ВСТАВЛЯЮТ?

У Вас есть две основных опции:

  1. , Когда курсор мыши по Вашему управлению, скройте системный курсор установкой this.Cursor = Cursors.None; и потяните свой собственный курсор с помощью любой техники, которую Вы любите. Затем обновите положение и появление Вашего курсора путем ответа на события от нажатия мыши. Вот два примера:

  2. Создает новый объект Курсора путем загрузки изображения из .cur или .ani файла. Можно создать и отредактировать эти виды файлов в Visual Studio. Существуют также некоторые свободные утилиты, плавающие вокруг для контакта с ними. В основном они - изображения (или изображения с анимацией), которые определяют "горячую точку", указывающую, в какую точку в изображении курсор расположен.

, Если Вы принимаете решение загрузиться из файла, обратите внимание необходимость в абсолютном пути файловой системы для использования Cursor(string fileName) конструктор. Неубедительно, относительный путь или URI Пакета не будут работать. , Если необходимо загрузить курсор из относительного пути или из ресурса, упакованного блоком, необходимо будет получить поток из файла и передать его в Cursor(Stream cursorStream) конструктор. Раздражающий, но верный.

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

174
задан dusoft 24 November 2009 в 21:51
поделиться

6 ответов

https://dev.mysql.com/doc/refman/8.0/en/insert-optimization.html

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

  • Подключение: (3)
  • Отправка запроса на сервер: (2)
  • Запрос на анализ: (2)
  • Вставка строки: (1 × размер of row)
  • Вставка индексов: (1 × количество индексов)
  • Закрытие: (1)

Из этого должно быть очевидно, что отправка одного большого оператора сэкономит вам 7 накладных расходов на оператор вставки, который при дальнейшем чтении текста также говорит:

Если вы вставляете много строк от одного и того же клиента одновременно, используйте операторы INSERT с несколькими списками VALUES для вставки нескольких строк за раз. Это значительно быстрее (в некоторых случаях во много раз быстрее), чем использование отдельных однострочных операторов INSERT.

269
ответ дан 23 November 2019 в 20:29
поделиться

Отправить как можно больше вставок по сети за один раз. Фактическая скорость вставки должна быть такой же, но вы увидите прирост производительности за счет снижения нагрузки на сеть.

8
ответ дан 23 November 2019 в 20:29
поделиться

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

7
ответ дан 23 November 2019 в 20:29
поделиться

Основным фактором будет то, используете ли вы механизм транзакций и включена ли у вас автоматическая фиксация.

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

Предполагая, что один поток, это означает, что серверу необходимо синхронизировать некоторые данные с диском для КАЖДОЙ СТРОКИ. Ему нужно дождаться, пока данные попадут в постоянное хранилище (надеюсь, на оперативную память с батарейным питанием в вашем RAID-контроллере). По своей сути это довольно медленно и, вероятно, станет ограничивающим фактором в этих случаях.

Я, конечно, предполагаю, что вы используете транзакционный движок (обычно innodb) И что вы не изменили настройки для уменьшения долговечности.

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

С другой стороны, в результате вы ДЕЙСТВИТЕЛЬНО ХОТИТЕ ИСПОЛЬЗОВАТЬ многострочные вставки.

Существует предел, превышение которого приводит к обратным результатам, но в большинстве случаев это не менее 10 000 строк. Так что, если вы объедините их в группы до 1000 строк, вы, вероятно, в безопасности.

Если вы используете MyISAM, есть масса других вещей, но я не буду утомлять вас ими. Мир.

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

С другой стороны, в результате вы ДЕЙСТВИТЕЛЬНО ХОТИТЕ ИСПОЛЬЗОВАТЬ многострочные вставки.

Существует предел, превышение которого приводит к обратным результатам, но в большинстве случаев это не менее 10 000 строк. Так что, если вы объедините их в группы до 1000 строк, вы, вероятно, в безопасности.

Если вы используете MyISAM, есть масса других вещей, но я не буду утомлять вас ими. Мир.

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

С другой стороны, в результате вы ДЕЙСТВИТЕЛЬНО ХОТИТЕ ИСПОЛЬЗОВАТЬ многострочные вставки.

Существует предел, превышение которого приводит к обратным результатам, но в большинстве случаев это не менее 10 000 строк. Так что, если вы объедините их в группы до 1000 строк, вы, вероятно, в безопасности.

Если вы используете MyISAM, есть масса других вещей, но я не буду утомлять вас ими. Мир.

Существует предел, при превышении которого результат становится контрпродуктивным, но в большинстве случаев это не менее 10 000 строк. Так что, если вы объедините их в группы до 1000 строк, вы, вероятно, в безопасности.

Если вы используете MyISAM, есть масса других вещей, но я не буду утомлять вас ими. Мир.

Существует предел, при превышении которого результат становится контрпродуктивным, но в большинстве случаев это не менее 10 000 строк. Так что, если вы объедините их в группы до 1000 строк, вы, вероятно, в безопасности.

Если вы используете MyISAM, есть масса других вещей, но я не буду утомлять вас ими. Мир.

17
ответ дан 23 November 2019 в 20:29
поделиться

Как правило, множественная вставка будет медленнее из-за накладных расходов на соединение. Выполнение нескольких вставок одновременно снизит накладные расходы на каждую вставку.

В зависимости от того, какой язык вы используете, вы можете создать пакет на своем языке программирования / сценария перед переходом в базу данных и добавить каждую вставку в пакет. Тогда вы сможете выполнить большой пакет, используя одну операцию подключения. Вот пример на Java.

3
ответ дан 23 November 2019 в 20:29
поделиться

Вы можете:

  • Проверить, что автоматическая фиксация отключена
  • Открыть соединение
  • Отправить несколько пакетов вставок в одной транзакции (размер примерно 4000-10000 строк? Вы видите)
  • Закрыть соединение

В зависимости от того, насколько хорошо ваш сервер масштабируется (его окончательно устраивает PostgreSQl , Oracle и ] MSSQL ), проделайте то же самое с несколькими потоками и множественными соединениями.

4
ответ дан 23 November 2019 в 20:29
поделиться
Другие вопросы по тегам:

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