iamserge, Вам проще с нугета стянуть MySql.Data и использовать уже существующую базу. Из минусов асинхронные методы этого пакета нифига не асинхронные. А по работе будет примерно тоже самое, что и MS Sql с родными дровами и адаптерами для C#
Лариса, Говорить что exact_hit это фактор поля и соответственно его нельзя вызывать без агрегатной функции в ранкере.
Тобишь нужно убрать его под сумму
OPTION ranker=expr('sum((lcs*user_weight)+IF(exact_hit=1,1000,0))*1000+bm25')
Лариса, Используйте никнейм того, кому отвечаете, а то рискует остаться без ответа.
exact_hit - парамететр для ранкера который Вам нужен, срабатывает при полном совпадении строки и запроса.
OPTION ranker=expr('sum(lcs*user_weight)*1000+bm25+IF(exact_hit=1,1000,0)') такой ранкер забустит результат с полным совпадением.
Если Вам нужно что бы самая длинная строка была в верху то можете в индексе зависти поле с длинной исходной строки, а потом использовать её в ранкере например так;
OPTION ranker=expr('sum(lcs*user_weight)*1000+myStrLength+bm25+IF(exact_hit=1,1000,0)')
Alexandr: Не ок. Навесте индекс по полям place,uid,status.
Index scan - полный проход индекса(очевидно не быстрый если таблица большая). После того как в плане будет Index seek проблема должна уйти
Zoya_Murmansk: А так можете попробовать например взять Group by от выделенных столбцов+id(или GuId) где выбрать например самый маленький id в группе а потом сделать Join по id для получения данных
Zoya_Murmansk: А как по вашему сервер должен понять значения какой строки ему нужна взять при группировке?=) С помощью агрегатной функции Вы и разрешаете этот конфликт
При работе с указателями на конце строки всегда будет нулевой символ(так как .Net при хранении использует его для обозначения конца строки). Дальше всё зависит от входных данных
Когда разговор идёт о миллионах и миллиардах строк выбирать не приходиться. Aalebedev спросил про быстрый способ я его и предложил. А про строки с нулевыми символами, так предобработку данных никто не отменял.
Добрый день.
Ну для начала сделайте пакетную загрузку данных, а то судя по вашему коду вы вставляете по одной записи(сильно поднимет скорость). Хорошо бы отключить индексирование, что бы не пересчитывать индексы каждый раз после вставки новых строк.
П.С.: в ms-sql есть такая вещь как BULK INSERT, которая работает на больших объемах намного быстрее обычного INSERT, думаю что и у MySql что то подобное должно быть
Я думаю что сделать можно, но работать одно будет ужасно медленно, а выглядеть ещё хуже. Ну и к тому же не стоит забывать тот факт, что Linq далеко не всегда генерирует нормальный sql(многие запросы можно ускорять в сотни раз). Так что я бы порекомендовал всё таки написать фун-цию на стороне сервера.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.