Здравствуйте, гость ( Вход | Регистрация )
|
evgen55 |
24.7.2017, 14:25
Сообщение
#1
|
|
Новичок Группа: Неактивирован Сообщений: 8 Регистрация: 24.7.2017 Пользователь №: 4590 Спасибо сказали: 0 раз(а) Репутация: 0
|
Есть база данных mysql на удаленном сервере. При обращении к таблице каждый запрос выполняется около 40 мс. Возможно ли както повысить скорость. Пробовал все это оборачивать в одну транзакцию но скорость от этого только уменьшилась
потом в цикле подставляю параметры И потом делаю Цитата(evgen55 @ 24.7.2017, 14:21) Link Есть база данных mysql на удаленном сервере. При обращении к таблице каждый запрос выполняется около 40 мс. Возможно ли както повысить скорость. Пробовал все это оборачивать в одну транзакцию но скорость от этого только уменьшилась потом в цикле подставляю параметры И потом делаю P.S. ОС Windows |
|
|
|
![]() |
|
lanz |
24.7.2017, 20:35
Сообщение
#2
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8
|
А где собственно вставка?
Попробуйте забиндить сразу все 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
|
Еще так можно попробовать.
Link |
|
|
|
|
lanz |
25.7.2017, 10:09
Сообщение
#5
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8
|
Ну и вообще
Link |
|
|
|
|
Iron Bug |
25.7.2017, 21:47
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12
|
Цитата(evgen55 @ 24.7.2017, 16:25) Link Возможно ли както повысить скорость. проверь, что твоя таблица индексирована по полям, по которым происходит выборка. можно также поиграться с настройками сервера. |
|
|
|
|
evgen55 |
27.7.2017, 16:29
Сообщение
#7
|
|
Новичок Группа: Неактивирован Сообщений: 8 Регистрация: 24.7.2017 Пользователь №: 4590 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(lanz @ 25.7.2017, 10:09) Link Ну и вообще Link 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) Link Что тотут не так, транзакции не поддерживаются - это очень странно. Цитата 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? При соединении с сервером? На сервере? В зависимости от этого нужно смотреть что конкретно оптимизировать.
|
|
|
|
|
evgen55 |
31.7.2017, 8:56
Сообщение
#11
|
|
Новичок Группа: Неактивирован Сообщений: 8 Регистрация: 24.7.2017 Пользователь №: 4590 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(lanz @ 28.7.2017, 16:13) Link Прежде всего посмотрите, где у вас задержка, в Qt? При соединении с сервером? На сервере? В зависимости от этого нужно смотреть что конкретно оптимизировать. Любой запрос (сама функция exec) выполняется 40 милисекунд, а в phpmyadmin выполняется мгновенно |
|
|
|
|
lanz |
31.7.2017, 9:06
Сообщение
#12
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8
|
Мнгновенно это сколько в миллисекундах?
|
|
|
|
|
evgen55 |
1.8.2017, 8:16
Сообщение
#13
|
|
Новичок Группа: Неактивирован Сообщений: 8 Регистрация: 24.7.2017 Пользователь №: 4590 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(evgen55 @ 31.7.2017, 8:56) Link Цитата(lanz @ 28.7.2017, 16:13) Link Прежде всего посмотрите, где у вас задержка, в Qt? При соединении с сервером? На сервере? В зависимости от этого нужно смотреть что конкретно оптимизировать. Любой запрос (сама функция exec) выполняется 40 милисекунд, а в phpmyadmin выполняется мгновенно Отображение строк 0 - 24 (4274 всего, Запрос занял 0.0018 сек.) |
|
|
|
|
lanz |
1.8.2017, 9:13
Сообщение
#14
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 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
Сообщение
#15
|
|
Новичок Группа: Неактивирован Сообщений: 8 Регистрация: 24.7.2017 Пользователь №: 4590 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(lanz @ 1.8.2017, 9:13) Link Цитата Отображение строк 0 - 24 (4274 всего, Запрос занял 0.0018 сек.) Это возможно сравнение яблок с апельсинами. 0.0018 это то что показывает phpmyadmin, я если честно не знаю, как он меряет, что он включает в это время и как вы меряли 40 мс. Приложите пожалуйста минимальный проект с бенчмарком чтобы можно было конкретно уже смотреть. Кроме того - существует ли проблема вообще? Т.е. вы наблюдаете тормоза при вставке или вам просто не нравится число 40? Согласитесь, что несколько странно видеть сишный код в 20 раз медленнее php, не верю int id; Соответственно когда селект возвращает примерно 4000 объектов и внутренний цикл содержит примерно 10-20 item получается слишком долго |
|
|
|
|
lanz |
1.8.2017, 11:21
Сообщение
#16
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8
|
Во первых QTime на Windows возвращает с точностью кратной то ли 15, то ли 20 мс, в любом случае, это слишком плохо.
Попробуйте QElapsedTimer, интерфейс тот же, а точность обычно лучше. Link Если все равно 40 мс будет получаться, замерьте время всего цикла(с 40000-80000 вставок) и разделите, тогда получите точное время. 40000-80000 вставок это довольно много, попробуйте все таки execBatch и если не поможет, то попробуйте просто слепить в строке нужный запрос на вставку всех строк за раз и его выполнить - получите скорость вставки напрямую. |
|
|
|
|
evgen55 |
2.8.2017, 14:23
Сообщение
#17
|
|
Новичок Группа: Неактивирован Сообщений: 8 Регистрация: 24.7.2017 Пользователь №: 4590 Спасибо сказали: 0 раз(а) Репутация: 0
|
Цитата(lanz @ 1.8.2017, 11:21) Link Во первых QTime на Windows возвращает с точностью кратной то ли 15, то ли 20 мс, в любом случае, это слишком плохо. Попробуйте QElapsedTimer, интерфейс тот же, а точность обычно лучше. Link Если все равно 40 мс будет получаться, замерьте время всего цикла(с 40000-80000 вставок) и разделите, тогда получите точное время. 40000-80000 вставок это довольно много, попробуйте все таки execBatch и если не поможет, то попробуйте просто слепить в строке нужный запрос на вставку всех строк за раз и его выполнить - получите скорость вставки напрямую. Спасибо большое, слепить запрос в одну строку помогло. execBatch пробовал он не поддерживается |
|
|
|
![]() ![]() ![]() |
|
|
Текстовая версия | Сейчас: 19.8.2025, 23:22 |