запрос на выбор счетчика занимает 2 минуты для результата подсчета в mysql - PullRequest
0 голосов
/ 21 сентября 2019

Я использую mysql базу данных, ее имя таблицы license_csv, и она имеет 18 million записей, и она использует MYISAM механизм, когда я пытаюсь считать запись без условия, где это занимает менее 1 секунды.для подсчета, но когда я применил, где условие требует 2 min для результата подсчета, я применил indexing для этих 2 столбцов lic_state и lic_city, тем не менее это займет 2 минуты для результата подсчета, может кто-нибудь помочьмне, что мне нужно сделать сейчас для этого запроса?здесь я также добавил свой запрос,

SELECT COUNT(*) as total 
from license_csv WHERE 
lic_state like '%ca%' AND lic_city LIKE '%fresno%'

1 Ответ

0 голосов
/ 21 сентября 2019

Проблема с вашим запросом состоит в том, что вы используете подстановочный знак % с обеих сторон строки.Это побеждает существующий индекс.Поскольку индексы являются последовательными, MySQL не может использовать их для этого типа условия, поскольку ему нечего сказать, где начинает поиск.

Возможные варианты:

  • если возможно, переключитесь на равенство вместо LIKE;тогда вы могли бы воспользоваться индексом (lic_state, lic_sity)
  • , в противном случае удаление символа подстановки слева (lic_state like 'ca%') может помочь
  • переключиться на FULL TEXT search
  • хранить список кодов CA и городов в другой таблице (которая должна намного меньше таблицы лицензий) и иметь столбец в таблице лицензий, ссылающийся на его первичный ключ;затем JOIN эта таблица в поиске.С помощью этой опции диапазон записей для поиска при применении условия поиска будет на порядок меньше
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...