2009-12-26 1 views
0

У меня есть таблица MySQL с 3-мя полями:Добавление полей для оптимизации MySQL запросов

  • Расположение
  • Переменная
  • Value

Я часто использую следующий запрос:

SELECT * 
    FROM Table 
WHERE Location = '$Location' 
    AND Variable = '$Variable' 
ORDER BY Location, Variable 

У меня более миллиона строк в м y таблица и запросы несколько медленны. Увеличится ли скорость запроса, если я добавлю поле VariableLocation, которое представляет собой переменную и местоположение в сочетании? Я мог бы изменить запрос:

SELECT * 
    FROM Table 
WHERE VariableLocation = '$Location$Variable' 
ORDER BY VariableLocation 

ответ

-1

Correction Update:

Предоставлено: @paxdiablo:

Столбец в таблице не будет никакой разницы. Все, что вам нужно, это индекс по обоим столбцам, и механизм MySQL будет использовать это. Добавление столбца в таблицу на самом деле хуже, чем с тех пор, как он разбивает 3NF и оставляет пространство. См. http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html, в котором указывается: SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2; Если в столбцах col1 и col2 существует указатель с несколькими столбцами, соответствующие строки могут быть выбраны напрямую.

+0

-1 - Вы можете объяснить, почему это произошло бы с точки зрения того, как MySQL управляет данными или оптимизировать запросы? – kdgregory

+0

Нет, я не могу объяснить вам хотя бы потому, что я не могу проголосовать за вас сначала, как вы это сделали !!! – Sarfraz

+0

Если вы не можете объяснить что-то с точки зрения известного поведения, то вы не даете реального ответа. У вас нет оснований для того, чтобы сказать «определенно увеличить производительность», потому что вы не знаете, почему это так.Как бы то ни было, вы сказали ОП точно, что он хотел услышать, что в лучшем случае распространяется на безобидное суеверие, в худшем случае его запросы будут выполняться хуже. Сравните это с другими плакатами, которые действительно дали обоснованные объяснения для добавления индекса. – kdgregory

2

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

6

Я хотел бы добавить индекс покрытия для столбцов location и variable:

ALTER TABLE 
    ADD INDEX (variable, location); 

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

Сочетание столбцов, вероятно, вызовет больше горя, чем это стоит. Например, если вам нужно вытащить записи только location или variable, вам нужно подстроить значения в подзапросе.

2

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

ALTER TABLE tablename ADD INDEX (location, variable); 

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

При попытке оптимизации запросов, команда EXPLAIN является весьма полезным: EXPLAIN in mysql docs

 Смежные вопросы

  • Нет связанных вопросов^_^