Я пытаюсь улучшить производительность существующей базы данных MySQL.
Это база данных о ресторанах, есть две соответствующие таблицы:
есть таблица для всех сущностей веб-сайта,каждая сущность имеет уникальный идентификатор, сущность может быть практически чем угодно, это может быть ресторан, пользователь и многое другое.Есть несколько типов сущностей, и что касается ресторанов, их тип сущности - «объект».
Позвольте мне также сказать, что эта структура базы данных в значительной степени существует, поэтому я не хочу вносить большие изменения, яЯ не собираюсь удалять таблицу всех сущностей, например.(Сама база данных не имеет данных, но движок PHP построен, поэтому будет сложно внести большие изменения в структуру).
есть также таблица только для объектов, есть несколько типов объектов вэта база данных, но рестораны, в частности, будут искать много, так как это тема веб-сайта, рестораны имеют несколько полей: страна, город, название, жанр.не может быть двух ресторанов с одинаковым названием в одном городе и стране (например, МОЖЕТ быть два ресторана с одинаковым названием, но в разных городах одной страны или в двух городах с одинаковым названием, норазные страны)
поэтому, исходя из этого факта, я должен создать уникальный трехколонный индекс для столбцов страны, города и имени.
Также я хочу сказать, что URL также созданв форме www.domain.com/Country/City/Restuarant-Name, поэтому комбинация названия страны-города должна быть получена быстро, и этот тип запроса будет происходить много.
Но и тамЭто будут запросы многих других типов, таких как: поиск названия ресторана (с использованием запроса LIKE, потому что искомое имя может быть частью полного имени) в определенном городе или в определенной стране.поиск всех ресторанов определенного жанра в определенной стране и городе.и почти все возможные комбинации.
Вероятно, наиболее часто используемые запросы будут: (а) искать название ресторана в определенном городе и стране (что будет таким же, как запрос, используемый при вводе URL-адреса).но будет использовать LIKE), (б) поиск ресторанов определенного типа в определенном городе и стране.и, наконец, (c) поиск названия ресторана в глобальном масштабе (во всей базе данных, без указания города и страны)
эта таблица (таблица объектов) в настоящее время имеет PRIMARY KEY, который является идентификатором объектов,Идентификатор также часто используется, будет ли передовая практика такой:
- сделать трехзначный УНИКАЛЬНЫЙ индекс из страны, города, имени
- сделать другой (не-unique) индекс из имен (поэтому запрос типа c, который я написал выше, будет выполнен быстро)
- может создать какую-то подстолью, которая содержит только рестораны из объектовтаблица, так что эта под-таблица будет запрошена.(это менее важно, поскольку, если я решу внести большие изменения, я, вероятно, сначала отделю рестораны от остальной части объекта)
Я был бы очень признателен за любую помощьЯ пытался решить это в течение долгого времени.
ps в таблице объектов некоторые объекты не будут иметь какого-либо жанра или любой страны или города, поэтому они останутся NULL, я знаю, что NULLзначения допускаются в УНИКАЛЬНОМ КЛЮЧЕ, но окажет ли это влияние на производительность?
Большое спасибо всем, кто хотел прочитать этот длинный вопрос:)