MySQL соответствия URL - PullRequest
       24

MySQL соответствия URL

1 голос
/ 05 июля 2011

Я вставляю URL в таблицу MySQL.Например, я вставил 8 записей, как показано ниже:

 url
-----------------------------
http://example.com 
http://www.example.com 
http://example.com/ 
http://www.example.com/
http://example.com/sports 
http://www.example.com/sports 
http://example.com/sports/ 
http://www.example.com/sports/  

.Теперь, как я могу написать запрос, соответствующий example.com, который должен вернуть первые 4 записи, поскольку они имеют одинаковый URL?Точно так же, как я могу написать запрос, чтобы получить последние 4 записи, поскольку они одинаковы?Даже если у меня огромное количество записей, запрос должен быть быстрым, возможно ли это?

1 Ответ

4 голосов
/ 05 июля 2011

Ну, если у вас есть эти ссылки в одной таблице, вы можете получить их как:

SELECT * FROM table WHERE url LIKE '%example.com%'

Это быстро? НЕТ - потребуется полное сканирование таблицы.

На вашем месте я бы смоделировал свою БД для хранения этих URL в 2 таблицах:

** * 1007 1008 * ссылка
  • ID
  • * base_url * - содержит example.com

related_links

  • ID
  • * link_id * - FK для ссылок
  • поддомен - содержит www.
  • *lative_url * - держит / спорт /

Редактировать - ответить на комментарий:

Ваша БД сейчас не нормализована. Вы держите несколько записей для «одного и того же» - вы не пользуетесь преимуществами БД. БД полезны при работе со структурированными данными - ваш запрос должен выполнять строковые операции - довольно сложные. Таким образом, хотя с текущей формой БД, вероятно, можно будет вернуть результаты, которые вам нужны и которые вы хотите получить, это не будет тривиальной задачей, и, безусловно, производительность будет плохой.

Моя рекомендация - изменить базу данных - по крайней мере, добавить столбцы subdomain и relative_path к вашей таблице и хранить эту информацию как можно более раздельно - чтобы иметь возможность выполнять агрегированные запросы к ней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...