Вопрос по индексу MySql и Asp.net C # - PullRequest
0 голосов
/ 03 февраля 2011

В Asp.net C # я использую следующий код для выбора из базы данных MySql:

string userid = "12";
MySqlCommand mysqlcmd = new MySqlCommand("SELECT productid FROM table WHERE userid=?userid", mysqlconn);
mysqlcmd.Parameters.AddWithValue("?userid", userid);
mysqlcmd.Connection.Open();
mysqlcmd.ExecuteReader();
...

В таблице идентификатор пользователя имеет тип int. Если у меня есть индекс в таблице идентификаторов пользователей, что произойдет с этим запросом, сможет ли он правильно использовать индекс, даже если идентификатор пользователя, который я добавляю к параметру, является строкой, а индекс в таблице - int?

Даст ли я лучшую производительность перед добавлением идентификатора пользователя в параметр, преобразует идентификатор пользователя в целое число типа этого:

int userid_int = Int32.Parse(userid);
MySqlParameter param = new MySqlParameter("?userid", MySqlDbType.Int32);
param.Value = userid_int;
cmd.Parameters.Add(param);

Или можно использовать только:

mysqlcmd.Parameters.AddWithValue("?userid", userid);

1 Ответ

0 голосов
/ 03 февраля 2011

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

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

index_column
------------
DHDHDSNDH233
DHDHDSNDH234
DHDHDSNDH235
DHDHDSNDH236

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

Это причина, по которой многие люди используют GUID при поиске-индексации строкового столбца.

Если столбец не PK, вам приходится мириться с этим возможным узким местом..

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