Калеб уже дал вам решение (и Джоэл предупредил о производительности индекса в комментарии), но я Я хотел бы предложить другой маршрут, который будет хорошо масштабироваться. Если ваши таблицы никогда не будут очень большими, вы можете проигнорировать этот совет. Фактически, вы можете игнорировать его вплоть до того момента, когда вы ожидаете, что производительность пострадает (или производительность имеет фактически начал страдать) - это принцип YAGNI.
Базы данных почти всегда читать намного больше, чем они написаны. Это означает, что подходящее время для определения, когда URL-адрес начинается с или содержит «/ q /», когда данные помещаются в таблицу, не каждый раз, когда вы его извлекаете. Это амортизирует стоимость расчета (сделанного во время записи) во всех чтениях.
Для этого масштабируемого решения у вас должен быть отдельный столбец в таблице, например "startsWithQ"
или "hasQ"
.
Затем с помощью триггера insert/update установите этот столбец на основе URL-адреса, помещенного в таблицу.
Тогда ваш запрос будет:
select * from MyURLs where hasQ = 'YES'
и, если у вас есть индекс по этому колонку, ваши запросы будут кричать вместе.
Если вы действительно смотрите на большинство проблем с базой данных, они обычно «мой запрос не достаточно быстрый», а не «мой диск не достаточно большой». Как правило, оптимальным подходом является дисковое пространство на диске.
Этот может содержать, если вы используете строку поиска '/q/%'
. Это должно быть профилировано, регулярно и в производстве - базы данных редко устанавливаются и забываются, поскольку производительность может измениться на основе данных в таблицах - измерение, не угадывайте.
Будет обязательно обеспечить улучшение, если строка поиска '%/q/%'
, если ваша база данных не является одним из тех редких животных, у которых больше записей, чем чтений.
Будьте осторожны с такими фильтрами: ''%/q /% '', где есть дикая карта спереди фильтра. Это сломает индексы. –