Насколько эффективен поиск в базе данных SQL? - PullRequest
2 голосов
/ 29 декабря 2010

Привет, я пытаюсь записать данные, которые у меня есть std::map<key, value> в базу данных SQL.В карте ключи сортируются для упрощения поиска, но когда я создам таблицу в sql элементов карты, как трудно будет выполнить поиск в таблице, чтобы получить запись по ее идентификатору ключа?

Ответы [ 6 ]

4 голосов
/ 29 декабря 2010

Поиск будет простым, эффективность будет зависеть от правильности вашей индексации.

1 голос
/ 29 декабря 2010

Примерно так же сложно, как научиться использовать оператор SQL SELECT.

0 голосов
/ 17 января 2011

Если данные помещаются в память, std :: map будет гораздо эффективнее, чем любая БД.

После того, как я проверил Sqlite3 с базой данных в памяти, std :: map был быстрее нана порядок (и sqlite в этом случае очень быстрый, чем любая другая СУБД, которую я видел)

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

Однако, если ваши данные очень большие или вы не хотите использовать слишком много памяти, СУБД является хорошим решением, и с учетом индекса по ключу это будет довольно быстро.

0 голосов
/ 30 декабря 2010

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

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

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

0 голосов
/ 30 декабря 2010

Ваш вопрос неясен, но кажется, что вы сравниваете яблоки и апельсины.SQL предназначен для эффективного поиска масштабируемых данных.Пары ключ-значение C (или любого другого языка) ограничены оперативной памятью, поэтому они не очень масштабируемы.Существуют накладные расходы при связи с RDBMS.Существует нехватка памяти, эффективность проектирования (т. Е. Выбранные вами типы данных и индексы), алгоритм C ++ реализует поиск (хэш / b-дерево) и т. Д.

В конце дня правильный вопросСпросите, «Какой инструмент лучше всего подходит для работы?» и оставьте его на этом.

0 голосов
/ 29 декабря 2010

Что может быть неэффективным, так это создание и деконструкция нескольких операторов выбора SQL, где все, что вам нужно, - это другое значение в предложении where для переменной.

Хранимые процедуры могут быть гораздо более эффективными для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...