Производительность ArrayList с базой данных MySql при получении записей - PullRequest
0 голосов
/ 09 июня 2011

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

Код:

while(result.next())
{
  String str = result.getString(1);
  LoginID_arraylist.add(str);
}

if(LoginID_arrayList.contains(loginid)
{
    // if exist --> than another query using loginid
}

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

Ответы [ 4 ]

4 голосов
/ 09 июня 2011

Не используйте ArrayList для поиска contains.Это имеет O (N) производительность.Вместо этого используйте HashSet, который имеет поиск O (1).

Тем не менее, еще лучше не запрашивать все строки в первую очередь.Просто сделайте запрос:

SELECT COUNT(*) FROM users WHERE login_id = ?

и посмотрите, равен ли результат 0 или нет.

1 голос
/ 09 июня 2011

Я бы использовал обычный выбор SQL и проверил, есть ли какие-либо результаты.

SELECT LOGIN_ID.ID FROM LOGIN_ID WHERE ID = 'loginid'

Таким образом, база данных может оптимизировать и кэшировать запросы, а также использовать любую индексацию по столбцам.Кроме того, вы будете использовать только столбец id, а не каждый столбец в таблице loginID.

1 голос
/ 09 июня 2011

Решение не будет хорошо масштабироваться с очень большими наборами данных, потому что у вас все еще есть время Big O (N) для использования функции has ().

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

Это спасет вас от поездки в БД и сэкономит на повторении N раз по списку в поисках чего-то, что вы могли бы найти внутри запроса.

1 голос
/ 09 июня 2011

Попробуйте использовать HashSet вместо ArrayList.

Набор не допускает дублирования и структурирован для более быстрого поиска.

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