crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Быстрая вставка строк в базу данных mysql
evgen55
  опции профиля:
сообщение 24.7.2017, 14:25
Сообщение #1


Новичок


Группа: Неактивирован
Сообщений: 8
Регистрация: 24.7.2017
Пользователь №: 4590

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть база данных mysql на удаленном сервере. При обращении к таблице каждый запрос выполняется около 40 мс. Возможно ли както повысить скорость. Пробовал все это оборачивать в одну транзакцию но скорость от этого только уменьшилась
QSqlQuery query;
query.prepare("SELECT id FROM objects WHERE subject_id=:subject_id");

потом в цикле подставляю параметры
query.bindValue(":subject_id",sid);

И потом делаю
query.exec()



Цитата(evgen55 @ 24.7.2017, 14:21) *
Есть база данных mysql на удаленном сервере. При обращении к таблице каждый запрос выполняется около 40 мс. Возможно ли както повысить скорость. Пробовал все это оборачивать в одну транзакцию но скорость от этого только уменьшилась
QSqlQuery query;
query.prepare("SELECT id FROM objects WHERE subject_id=:subject_id");

потом в цикле подставляю параметры
query.bindValue(":subject_id",sid);

И потом делаю
query.exec()

P.S. ОС Windows
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
lanz
  опции профиля:
сообщение 1.8.2017, 9:13
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Цитата
Отображение строк 0 - 24 (4274 всего, Запрос занял 0.0018 сек.)

Это возможно сравнение яблок с апельсинами. 0.0018 это то что показывает phpmyadmin, я если честно не знаю, как он меряет, что он включает в это время и как вы меряли 40 мс.
Приложите пожалуйста минимальный проект с бенчмарком чтобы можно было конкретно уже смотреть.

Кроме того - существует ли проблема вообще? Т.е. вы наблюдаете тормоза при вставке или вам просто не нравится число 40? :) Попробуйте вставить много строк, увеличивается ли время пропорционально? Как вы меряли время?

Согласитесь, что несколько странно видеть сишный код в 20 раз медленнее php, не верю :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
evgen55
  опции профиля:
сообщение 1.8.2017, 10:41
Сообщение #3


Новичок


Группа: Неактивирован
Сообщений: 8
Регистрация: 24.7.2017
Пользователь №: 4590

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(lanz @ 1.8.2017, 9:13) *
Цитата
Отображение строк 0 - 24 (4274 всего, Запрос занял 0.0018 сек.)

Это возможно сравнение яблок с апельсинами. 0.0018 это то что показывает phpmyadmin, я если честно не знаю, как он меряет, что он включает в это время и как вы меряли 40 мс.
Приложите пожалуйста минимальный проект с бенчмарком чтобы можно было конкретно уже смотреть.

Кроме того - существует ли проблема вообще? Т.е. вы наблюдаете тормоза при вставке или вам просто не нравится число 40? :) Попробуйте вставить много строк, увеличивается ли время пропорционально? Как вы меряли время?

Согласитесь, что несколько странно видеть сишный код в 20 раз медленнее php, не верю :)

int id;
DB = QSqlDatabase::addDatabase("QMYSQL");
DB.setHostName("xxx.xxx.xxx.xxx");
DB.setDatabaseName("xxxxxxxx");
DB.setUserName("xxxxxxx");
DB.setPassword("xxxxxxxxxxx");
QSqlQuery* queryI;
QTime time;
queryI=new QSqlQuery(DB);
queryI->setForwardOnly(true);
queryI->prepare("INSERT INTO subtags(p_id,p_tag,item) VALUES(:p_id,:p_tag,:item)");
QSqlQuery query;
query.setForwardOnly(true);
query.prepare("SELECT id,subject_id,FROM objects");
while (query.next()) {
id=query.value(0).toString();
...
// цикл вставки где меняется p_tag и item
queryI->bindValue(":p_id",id);
queryI->bindValue(":p_tag","walling_type");
queryI->bindValue(":item",AllObject[ind].WALLING_TYPE);
time.start();
if (!queryI->exec())
            qDebug()<<"error update insert WALLING_TYPE"<<id;
else qDebug()<<time.elapsed(); // здесь каждый запрос 40 мс
...
}


Соответственно когда селект возвращает примерно 4000 объектов и внутренний цикл содержит примерно 10-20 item получается слишком долго
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- evgen55   Быстрая вставка строк в базу данных mysql   24.7.2017, 14:25
- - lanz   А где собственно вставка? Попробуйте забиндить сра...   24.7.2017, 20:35
|- - evgen55   Запрос вставки содержит много полей поэтому не хот...   25.7.2017, 8:11
- - lanz   Еще так можно попробовать. http://doc.qt.io/qt-5/q...   25.7.2017, 9:04
- - lanz   Ну и вообще https://dev.mysql.com/doc/refman/5.6/e...   25.7.2017, 10:09
|- - evgen55   Цитата(lanz @ 25.7.2017, 10:09) Ну и вооб...   27.7.2017, 16:29
- - Iron Bug   Цитата(evgen55 @ 24.7.2017, 16:25) Возмож...   25.7.2017, 21:47
- - lanz   Что тотут не так, транзакции не поддерживаются - э...   27.7.2017, 19:09
|- - evgen55   Цитата(lanz @ 27.7.2017, 19:09) Что тотут...   27.7.2017, 20:40
- - lanz   Прежде всего посмотрите, где у вас задержка, в Qt?...   28.7.2017, 16:13
|- - evgen55   Цитата(lanz @ 28.7.2017, 16:13) Прежде вс...   31.7.2017, 8:56
|- - evgen55   Цитата(evgen55 @ 31.7.2017, 8:56) Цитата(...   1.8.2017, 8:16
- - lanz   Мнгновенно это сколько в миллисекундах?   31.7.2017, 9:06
- - lanz   ЦитатаОтображение строк 0 - 24 (4274 всего, Запрос...   1.8.2017, 9:13
|- - evgen55   Цитата(lanz @ 1.8.2017, 9:13) ЦитатаОтобр...   1.8.2017, 10:41
- - lanz   Во первых QTime на Windows возвращает с точностью ...   1.8.2017, 11:21
- - evgen55   Цитата(lanz @ 1.8.2017, 11:21) Во первых ...   2.8.2017, 14:23


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 8:06