Для выбора только определенных столбцов из нескольких столбцов для заданного значения в pandas:
select col_name1, col_name2 from table where column_name = some_value.
Опции:
df.loc[df['column_name'] == some_value][[col_name1, col_name2]]
или
df.query['column_name' == 'some_value'][[col_name1, col_name2]]
Ваш первый запрос будет работать, но потребует полного сканирования таблицы, потому что любой индекс на том столбце будет проигнорирован. Необходимо будет также сделать некоторый динамический SQL для генерации всех операторов LIKE.
Попытка полнотекстовый поиск, если Ваш SQL Server использования или выезд один из Lucene реализации. Joel недавно говорил о своем успехе с ним.
Кажется на поиск полнотекстового поиска. Поскольку Вы хотите запросить ряд ключевых слов против описания платы и найти какие-либо хиты? Корректный?
Лично, я сделал это прежде, и это удалось хорошо для меня. Единственными проблемами, которые я видел, являются возможно проблемы с неиндексируемым столбцом, но я думаю, что у Вас была бы та же проблема с где пункт.
Мой совет Вам является просто взглядом на планы выполнения между двумя. Я уверен, что это будет отличаться, какой лучше в зависимости от ситуации, точно так же, как все хорошие проблемы программирования.
@Dillie-O
, Насколько большой эта таблица?
, Каков тип данных поля Description?
, Если любой является маленьким, полнотекстовый поиск будет излишеством.
@Dillie-O
, Возможно, не ответ Вы, где поиск, но я защитил бы изменение схемы...
предложенная схема:
create table name(
nameID identity / int
,name varchar(50))
create table description(
descID identity / int
,desc varchar(50)) --something reasonable and to make the most of it alwase lower case your values
create table nameDescJunc(
nameID int
,descID int)
Это позволит, использовать индекс без необходимо реализовать решение для устройства, повышаяющего характеристики, и сохраняет данные атомарными.
связанный: Рекомендуемый дизайн базы данных SQL для тегов или метки
Производительность будет, зависят от фактического сервера, чем Вы используете, и от схемы данных и объема данных. С текущими версиями SQL Server MS тот запрос должен работать очень хорошо (MS SQL Server 7.0 имел проблемы с тем синтаксисом, но он был обращен в SP2).
Вы выполнили тот код через профилировщика? Если производительность является достаточно высокой, и данные имеют в распоряжении соответствующие индексы, Вы должны быть все установлены.
КАК '%fiend %' никогда не будет использовать искание, КАК '% злодея' будет. Просто подстановочный поиск не является sargable
трюк, который я немного подобрал, иди сделать "строго типизированный" анализ списка в хранимая процедура должна проанализировать список в табличной переменной / временный таблица
Я думаю, что вы могли бы здесь сослаться на то, чтобы поместить ключевые слова для включения в таблицу, а затем использовать реляционное деление для поиска совпадений (также можно использовать другую таблицу для слов, которые следует исключить). Рабочий пример в SQL см. В Поиск по ключевым словам Джо Селко .
Попробуйте это;
SELECT Id, Name, Description
FROM dbo.Card
INNER JOIN @tblKeyword ON dbo.Card.Description LIKE '%' +
CONCAT(CONCAT('%',@tblKeyword.Value),'%') + '%'