Украшающие URL с индексом FULLTEXT - PullRequest
3 голосов
/ 05 июня 2011

В настоящее время я создаю веб-сайт с несколькими страницами, и для того, чтобы украсить URL-адреса сайта, я использую такие адреса, как http://mydomain.com/category/item-name

Я использую таблицы MySQL, чтобы получить текущий элемент из MySQLУ меня есть два варианта:

1) Добавить идентификатор элемента в заголовок: http://mydomain.com/category/28745/item-name (где 28745 - идентификатор в таблице).Таким образом, я могу выполнить запрос SELECT * FROM products WHERE ID=28745.Простой подход, но проблема в том, что URL немного уродливее.

2) Получить элемент с помощью текстового поиска.В этом случае я буду использовать имя элемента в качестве FULLTEXT (используя MyISAM), поэтому запрос будет SELECT * FROM products WHERE item-name=some-text.

Я пытаюсь выяснить, есть ли какие-либо недостатки у второгоподход.Означает ли использование FULLTEXT вместо индекса на поле INT производительность?Действительно ли это важно для поисковых систем, если URL состоит из идентификатора и немного уродлив?

Спасибо,

Меир

Ответы [ 4 ]

2 голосов
/ 05 июня 2011

Вам не нужен индекс FULLTEXT, это первое. Индекс FULLTEXT - это индекс, используемый для поиска в базе данных текста. То, что вы делаете, это точное соответствие, вы не ищете записи.

Тем не менее, в чем состоит недостаток индекса над текстовым столбцом над целым числом?

Первое, это размер. Целые числа требуют меньше места для хранения. Их индексы требуют меньше места для хранения. Чтобы сохранить целое число, вам нужно 4 байта (2 ^ 32 - диапазон). Для хранения одного символа ASCII вам потребуется 1 байт. Таким образом, слово, содержащее более 4 букв, займет больше места, чем число 4,5 млрд.

Во-вторых, вы вынуждены использовать MyISAM, если по каким-то причинам вы хотите иметь полнотекстовые индексы. Есть преимущества и недостатки MyISAM по сравнению с InnoDB, и эта тема хорошо освещена здесь, в SO.

Короче говоря - если у вас нет категорий более 100 000 и растет и если вам не нужны расширенные параметры поиска для ваших категорий - не используйте полнотекстовый индекс, используйте обычный. Стол движка решать вам. Для небольшого объема данных все будет работать без проблем.

0 голосов
/ 05 июня 2011

Рекомендую поместить номер страницы в отдельном поле.
Забудьте об использовании полнотекстового индекса.

Сделайте ваш стол таким:

TableURL
   pageid integer autoincrement primary key
   url varchar(1000)
   pagetext text

Теперь вы можете просто получить URL, выполнив:

$pageid = mysql_real_escape_string(.....);
....
SELECT pagetext from tableurl where pageid = '$pageid'

Это сделает ваш поиск намного быстрее, ускорит вставку и сохранит ваш db-дизайн в чистоте, а также предотвратит получение дублированных результатов.

0 голосов
/ 05 июня 2011

Может быть, использование даты в ваших адресах вместо идентификатора является более чистым подходом?


Edit:

Если речь идет о продуктах, я думаю, что лучше отображать их в виде текста, как при втором подходе, потому что у вас, вероятно, есть уникальные названия продуктов в категории? И если это не так, вы можете добавить идентификатор в адрес:

http://mydomain.com/category/normal-item
http://mydomain.com/category/item-that-appears-multiple-times/1
http://mydomain.com/category/item-that-appears-multiple-times/2
http://mydomain.com/category/item-that-appears-multiple-times/3
0 голосов
/ 05 июня 2011

поиск строк влияет на производительность, но наличие дружественных имен также имеет значение для поисковых систем и является более наглядным для пользователя при совместном использовании. Используйте указатель на поле имени элемента в базе данных, чтобы немного ускорить поиск.

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