Не слишком необычно рассчитать стоимость SQL в запросе в терминах операций с дисками (обычно это означает, что чтение/запись блока (обычно 8 КБ) является единицей для ваших затрат). (В памяти-БД должно что-то изменить в этой линии мысли).
Если у вас есть сотни, возможных тысяч предметов и каждый элемент ... Скажите 20 байтов, то ваша полная база данных, возможно, будет входить в один блок на диске (400 элементов/блок). Может быть, ему нужна еще пара блоков, но ура: это малозаметное небольшое число. С такой небольшой базой данных ваша база данных, вероятно, будет располагаться в кеше памяти вашей базы данных, и вам нужно будет заплатить только за доступ на запись. По мере роста вашей базы данных количество доступных блоков доступа может быть экспоненциально уменьшено, если у вас есть индекс.
Как ваше решение, так и решение Билла не будут вызывать доступ к записи, если элемент уже присутствует в базе данных, и поэтому он должен быть одинаково быстрым.
Интересная часть будет:
Я, возможно, придется запустить Вкладыше несколько сотен раз в каждом представления.
Это означает, что вы можете написать один и тот же блок на диске сотни раз. Это было бы быстрее, если бы вы могли сделать это за один шаг. Однако это действительно проблема, поскольку я не знаю никакой функции SQL, которая допускает такое поведение. MySQL INSERT предлагает способ указать несколько значений в одном статусе. Это МОЖЕТ быть значительным плюсом (я не знаю, как умный MySQL обрабатывает эту ситуацию), но он специфичен для MySQL и не переносится.
Еще один способ ускорить процесс - не дожидаться, пока блоки, которые вы изменили, записаны на диск. Это сопряжено с риском потери данных без уведомления, но может быть значительным повышением производительности. Опять же, это относится к используемой СУБД. Например. если вы используете MySQL с InnoDB, вы можете установить опцию innodb_flush_log_at_trx_commit=0
в my.ini для архивирования этого поведения.
было бы лучше, чтобы запустить простой запрос на выборку на столе клиентов (по заказу ASC), и сделать бинарный поиск или что-то по результатам
Это приведет к ненужному копирования больших объемов данные из вашей СУБД на клиента (которые могут быть на разных компьютерах, обмениваясь данными по сетевому протоколу). Это будет все еще в порядке для вашей небольшой БД, но это не очень хорошо масштабируется. Он может быть полезен только в том случае, если он поможет вам сохранить данные за одну операцию на диск.
Это также работает с экземплярами строк? – SNpn
+1. Такой подход «проще просить прощения, чем разрешение» более безопасен, чем «смотреть до того, как вы прыгаете», как описывает OP, если есть возможность одновременного одновременного подключения к базе данных. – ruakh
Да, это работает для строковых столбцов. –