Я вроде использовал в запросе 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.
Пример (все сделано мной, чтобы было понятно):
Какой лучший способ реализации моей проблемы? Поблагодарить!
Задача ещё не решена.
Других решений пока нет …