2014-11-08 2 views
1

Я новичок в базе данных.Вставка в Sqlite медленная

Я завязывание вставить 22000 слова в БД SQLite, но она принимает навсегда завершить

for (int i=0;i<s.size();i++){    
    String sql = "INSERT INTO WORD (word) VALUES ("+"'"+s.get(i)+"'"+");"; 
    statement.executeUpdate(sql); 
} 

имени таблицы WORD и имя поля является словом (которое является String) Здесь S является arrylist и s.get (i) возвращает строку ... Я установил соединение и попытался обновить таблицу .

Очень медленно. Что я делаю не так?

+0

Что-то изменилось, если вы попытаетесь вставить пакетную вставку? – BackSlash

+2

Сколько раз вам вставляете 22 000 записей? Что такое «медленный», как, например, сколько времени он занимает? – Patrick

+0

Это на другом языке программирования, но посмотрите на http://stackoverflow.com/questions/1711631/improve-insert-per-second-performance-of-sqlite – Patrick

ответ

1

Его медленно, потому что вы стреляете 22000 запросов в базу данных. Вы должны вставлять партии. Это устранит проблему. Даже если одна вставка занимает 10 мс, общее время составляет 3,5 минуты!

Простая вставка запроса с пакетами 2 будет выглядеть следующим образом

"INSERT INTO WORD (word) VALUES ("+"'"+s.get(i)+"'"+"), ("+"'"+s.get(i+1)+"'"+");"; 

Это позволит сократить время наполовину. Теперь вам придется программно вставить больше этих значений.

+1

«Можете ли вы захотеть»? Вы догадываетесь? Не лучше ли было бы объяснить ОП, что такое пакетная вставка, и как он это выполнит? Самое первое предложение: «Я новичок в этом», поэтому есть большая вероятность, что он не знает, что такое пакетная вставка. – Patrick

+0

Есть возможность отредактировать ответ на случай, если мой ответ будет недостаточным. Спасибо, что указали на проблемы, так или иначе, обновите их. – vatsal