crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Быстрая вставка строк в базу данных 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
  опции профиля:
сообщение 24.7.2017, 20:35
Сообщение #2


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

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

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




Репутация:   8  


А где собственно вставка?
Попробуйте забиндить сразу все subject_id,
SELECT id FROM objects WHERE subject_id IN :subject_id
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
evgen55
  опции профиля:
сообщение 25.7.2017, 8:11
Сообщение #3


Новичок


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

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




Репутация:   0  


Запрос вставки содержит много полей поэтому не хотелось его здесь указывать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 25.7.2017, 9:04
Сообщение #4


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

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

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




Репутация:   8  


Еще так можно попробовать.
http://doc.qt.io/qt-5/qsqlquery.html#execBatch
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 25.7.2017, 10:09
Сообщение #5


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

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

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




Репутация:   8  


Ну и вообще
https://dev.mysql.com/doc/refman/5.6/en/ins...timization.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 25.7.2017, 21:47
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

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




Репутация:   12  


Цитата(evgen55 @ 24.7.2017, 16:25) *
Возможно ли както повысить скорость.

проверь, что твоя таблица индексирована по полям, по которым происходит выборка. можно также поиграться с настройками сервера.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
evgen55
  опции профиля:
сообщение 27.7.2017, 16:29
Сообщение #7


Новичок


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

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




Репутация:   0  


Цитата(lanz @ 25.7.2017, 10:09) *


qDebug() << DB.driver()->hasFeature(QSqlDriver::PreparedQueries);
qDebug() << DB.driver()->hasFeature(QSqlDriver::BatchOperations);
qDebug() << DB.driver()->hasFeature(QSqlDriver::Transactions);
Все возвращает false. Я правильно понимаю что ни пакетная вставка ни транзакции не поддерживаются? Что можно сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 27.7.2017, 19:09
Сообщение #8


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

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

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




Репутация:   8  


Что тотут не так, транзакции не поддерживаются - это очень странно.

Цитата
Note that some databases need to be open() before this can be determined.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
evgen55
  опции профиля:
сообщение 27.7.2017, 20:40
Сообщение #9


Новичок


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

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




Репутация:   0  


Цитата(lanz @ 27.7.2017, 19:09) *
Что тотут не так, транзакции не поддерживаются - это очень странно.

Цитата
Note that some databases need to be open() before this can be determined.


Спасибо, теперь только DB.driver()->hasFeature(QSqlDriver::BatchOperations); false Можно ли это както исправить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 28.7.2017, 16:13
Сообщение #10


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

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

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




Репутация:   8  


Прежде всего посмотрите, где у вас задержка, в Qt? При соединении с сервером? На сервере? В зависимости от этого нужно смотреть что конкретно оптимизировать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 24.11.2024, 19:15