Sql Поиск по миллионам записей.Возможный? - PullRequest
0 голосов
/ 22 декабря 2011

В моей базе данных sql server 2005 есть таблица, которая содержит около 50 миллионов записей.У меня есть столбцы firstName и LastName, и я бы хотел, чтобы пользователь мог выполнять поиск по этим столбцам, не занимая их вечно.Есть ли способ сделать мой запрос быстрым из индексации этих столбцов?Кроме того, я хочу искать похожие звучащие имена.например, если пользователь ищет Дэнни, я хотел бы вернуть записи с именем Дэн, а также Даниэль.Было бы неплохо показать пользователю рейтинг в%, насколько близко полученный результат к тому, что он на самом деле искал.Я знаю, что это задача туфа, но держу пари, я не первый в мире, кто сталкивается с этой проблемой:)

Спасибо за вашу помощь.

Ответы [ 3 ]

3 голосов
/ 22 декабря 2011

У нас есть базы данных с полмиллиарда записей (Oracle, но должны иметь аналогичные показатели). Вы можете искать в нем в течение нескольких миллисекунд, если у вас есть правильные индексы. В вашем случае поместите указатель на имя и фамилию. Использование индекса двоичного дерева будет работать хорошо и будет масштабироваться в зависимости от размера вашей базы данных. Осторожные предложения LIKE часто нарушают использование индекса и в значительной степени ухудшают производительность. Я знаю, что MySQL может продолжать использовать индексы с предложениями LIKE, когда подстановочные знаки находятся только справа от строки. Вы должны сделать аналогичный поиск для SQL Server.

Сходство строк действительно не просто. Взгляните на http://en.wikipedia.org/wiki/Category:String_similarity_measures,, вы увидите некоторые из возможных алгоритмов. Не могу сказать, если SQL Server действительно реализует один из них, не знаю эту базу данных. Попробуйте Google "SQL Server" + названия алгоритмов, чтобы, возможно, найти то, что вам нужно. В противном случае у вас есть код, предоставленный в Wiki для различных языков (возможно, не SQL, но вы должны иметь возможность адаптировать их для хранимой процедуры).

0 голосов
/ 22 декабря 2011

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

0 голосов
/ 22 декабря 2011

Вы пробовали полнотекстовую индексацию? Я использовал его в полях свободного текста в таблице, содержащей более миллиона записей, и нашел, что это довольно быстро. Кроме того, вы можете добавить к нему синонимы, чтобы все индексы Dan, Danial и Danny были одинаковыми (где вы получаете словарь эквивалентов имен, это отдельная история). Это также позволяет выполнять поиск по шаблону. Полнотекстовая индексация также может занимать место, хотя я считаю, что она менее полезна для имен (лучше для документов).

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