2013-08-07 5 views
1

У меня есть таблица, которая выглядит следующим образом:Mysql производительность отправки данных

ID (INT, 9, UNIQUE KEY) --- Пункт (INT, 3) --- Userid (INT, 9) - - Положение (VARCHAR, 12)

Теперь я хочу, чтобы запустить феллинг запрос:

SELECT COUNT(*) 
FROM table 
WHERE Position LIKE 'BAG%' 
AND Userid = ".USERID." 

Единственные возможные позиции для этих случаев будет "BAG0", "BAG1", [...] , "BAG6"
И они всегда уникальны - это означает, что нет Userid, который имеет два элемента в BAG2, например.
Но это не всегда уникально - например, возможны две строки, имеющие «Userid: 82378, Positon:« BOX1 »»

Даже если я попытаюсь, предложение IN() не изменит результат.

«Отправка данных» -time для этого запроса всегда составляет около 50 мс.

Есть ли у вас идеи, как я могу изменить эту таблицу, чтобы этот запрос работал быстрее?

+0

и вам это нужно быстрее, чем 'ваш сервер' может это сделать, потому что ...? –

+0

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

ответ

2

Это ваш запрос:

SELECT COUNT(*) 
FROM table 
WHERE Position LIKE 'BAG%' AND 
     Userid = ".USERID."; 

Это довольно простой запрос. Единственный способ ускорить это - использовать индекс. Я бы предложил составной индекс table(UserId, Position). MySQL должен оптимизировать like, потому что исходный префикс является постоянным. Но, если вы хотите быть действительно, действительно уверены, что индекс будет использоваться, вы можете сделать:

SELECT COUNT(*) 
FROM table 
WHERE Position in ('BAG0', 'BAG1', 'BAG2', 'BAG3', 'BAG4', 'BAG5', 'BAG6') and 
     Userid = ".USERID."; 
+0

Да, но также может быть несколько строк, которые имеют одинаковые Userid и Position (но НЕ НРАВИТСЯ BAG%). Только «BAG%» + Userid уникален –

+0

@TobiasBaumeister. , , Интересное наблюдение, но это не влияет на мой ответ. Индекс не предполагает уникальности на любом уровне. –

+0

Ой, я вижу - я попробую это :) Я перепутал это с первичным ключом, извините –

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