Сфинкс лучший способ ГДЕ и ОБНОВИТЬ на MySql таблице

Я вроде использовал в запросе MySQL:

UPDATE
Tovar
Tovar INNER JOIN (
SELECT * FROM (.....
SELECT * FROM
....) as `tmp` ON
CONCAT(' ',Tovar.drugApt,' ') LIKE CONCAT('% ',tmp.`P`,' %')
OR IF(
tmp.line is not null,
CONCAT(' ',Tovar.drugApt,' ') LIKE CONCAT('% ',tmp.`line`,' %'),
0
) OR IF(
tmp.invert is not null,
CONCAT(' ',Tovar.drugApt,' ') LIKE CONCAT('% ',tmp.`invert`,' %'),
0
)
WHERE
Tovar.idPreparat IS NULL
AND Tovar.md5Drug <> 0xF7270DB295EE1770CAD49A0CB0C40D91
) tmpf ON tmpf.idT = Tovar.id
SET Tovar.idPreparat = tmpf.id;

Как известно, MySQL не использует индекс:

WHERE LIKE '%....%'

Низкая производительность.
Тогда я решил попробовать индекс Fulltext в MySQL, но я не принимаю время выполнения.
Теперь я перешел к Сфинксу. Поскольку я работаю в нем впервые, прошу помочь.

Стол Товар:

id, idPreparat, idCountry, idManufacturer, drugA, countryA, manfA

Препарат таблицы:

id, prep

Товар.идПрепарат, связанный с Препарат.ид

Я создаю два индекса в Сфинксе:

source tovar : apt
{
sql_query       =  SELECT Tovar.id as id, Tovar.drugApt as drug,Tovar.countryApt as country,Tovar.manfApt as manf FROM Tovar
sql_field_string = drug
sql_field_string = country
sql_field_string = manf
sql_ranged_throttle = 100
}

source prep : apt
{
sql_query       =  SELECT  id, prep FROM Preparat
sql_field_string = cn
sql_ranged_throttle = 100
}

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

Какой лучший способ реализации моей проблемы? Поблагодарить!

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector