Вы выполняете внутреннее соединение, которое должно идти быстро, если оно правильно проиндексировано, левое соединение в матче «% test%», вероятно, находится там, где оно занимает время.
он проходит через ваши max 60k строк (вы выбираете все столбцы), и когда он попадает в поле agname, он должен пересекать строку, чтобы соответствовать тесту слова где-то в строке 60 000 раз. Я бы сказал, оптимизировать «% тестовое%», если есть ни в коем случае вокруг этого ... Вы можете
appphone - сколько различных сценариев есть -
ON (**p.appphone = phone_bus OR p.appphone = phone_res OR p.appphone = phone_fax**) AND p.appphone != ''
вы могли бы присоединиться на ключ, и затем используйте свой вложенный оператор OR в предложении WHERE, нет?
Возможно, вы можете сказать, где p.appphone <> phone_print или что-то такое, что будет включать этот вложенный оператор OR, но оптимизирует его, поэтому он просто ищет то, что не является, а не тремя разными экземплярами того, что могло бы быть. также действительно p.appphone действительно = '', или это null? Не уверен точно, насколько быстрее он это сделает, но вы можете сказать, где p.appphone не является нулевым слева, как упоминалось ранее.
Сколько строк в таблицах, которые вы запрашиваете? –
@brian 80,000 in p, 60,000 in ps и 80,000 in g – user583576
Спасибо. Где находится этот db? –