Улучшение URL-адресов с помощью ПОЛНОТЕКСТОВОГО индекса

#mysql #seo

#mysql #seo

Вопрос:

В настоящее время я создаю веб-сайт с несколькими страницами, и для того, чтобы украсить 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) Извлеките элемент с помощью текстового поиска. В этом случае я буду использовать item-name как FULLTEXT (используя MyISAM ), поэтому запрос будет SELECT * FROM products WHERE item-name=some-text .

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

Спасибо,

Меир

Ответ №1:

Вам не нужен ПОЛНОТЕКСТОВЫЙ индекс, это первое. ПОЛНОТЕКСТОВЫЙ индекс — это индекс, используемый для поиска текста в базе данных. То, что вы делаете, является точным соответствием, вы не ищете записи.

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

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

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

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

Комментарии:

1. Почему точное соответствие не запрашивает индекс? В чем разница между выполнением SELECT * ИЗ таблицы, ГДЕ int_index = 10, и SELECT * ИЗ таблицы, ГДЕ string_index = «привет» . Почему второму запросу не требуется индексировать string_index?

2. Где я говорил, что точное соответствие не требует индекса? Я сказал, что вам не нужен ПОЛНОТЕКСТОВЫЙ индекс, просто обычный B-Tree в столбце, с которым вы хотите сопоставить. Я перечитал свой пост и не смог найти, где я точно упомянул, что вам не нужен индекс, я даже упомянул, что вы должны использовать обычный вместо полнотекстового.

3. о, хорошо, извините. Я неправильно понял

Ответ №2:

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

Ответ №3:

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

Создайте свою таблицу следующим образом:

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

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

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

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

Ответ №4:

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


Редактировать:

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

 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
  

Комментарии:

1. @Anze Jarni: Потому что дата более значима, чем идентификатор.

2. Я не думаю, что это поможет каким-либо возможным образом. Кроме этого, дата не может быть уникальной, идентификатор, с другой стороны.

3. О, теперь я вижу, что неправильно это понял. Я думал, это было о блоге или что-то в этом роде, но ему просто нужны ссылки на продукты .