У меня очень странный вопрос, исходящий из замечаний, которые я только что сделал, которые могут помочь мне лучше понять поведение моей базы данных и создать ее лучше.Почему MySQL-запрос выполняется быстрее во второй раз?
Прежде всего, это база данных MySQL, о которой мы говорим. В поле User_ID есть индекс.
Вот код, я бегу:
query3 =("SELECT Content FROM Twit "
"WHERE User_ID = %s "
"limit 25 ")
for userid, c_word in user22_list:
cursorSQL.execute(query3, (userid,))
По какой-то причине, что я не понимаю, когда я запускаю его для 200 Fisrt пользователей, например, то остановить его, он бы Arround за 1 сек 10 пользователей, довольно медленно.
Но Если через несколько минут я запустил его для первого пользователя 1000, он достигнет 200 менее чем за секунду, а затем замедлит скорость 10user/sec после этого и так далее, если я запустил его за 5000 после этого (очень быстро до 1000, медленный после этого).
Вопросы:
- Может запрос будет временно храниться где-то (в памяти моего сервера?) Объяснить свою скорость?
- Вы видите какие-либо способы ускорить процесс?
***** Edit1: В соответствии с просьбой:
ВыходSHOW CREATE TABLE Twit
Table Create Table Twit CREATE TABLE `Twit` ( `ID_num` bigint(45) NOT NULL, `Content` varchar(250) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `User_ID` bigint(24) NOT NULL, `Location` varchar(70) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `Date_create` datetime NOT NULL, `Retweet_count` int(7) NOT NULL, `isRetweet` tinyint(1) NOT NULL, `hasReetweet` tinyint(1) NOT NULL, `Original` bigint(45) DEFAULT NULL, `Url` varchar(150) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `Favorite_count` int(7) NOT NULL, PRIMARY KEY (`ID_num`), KEY `User_ID` (`User_ID`), KEY `Date_create` (`Date_create`), KEY `User_ID_2` (`User_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
ВыходEXPLAIN SELECT Content From...
- ID = 1
- SELECT_TYPE = 'SIMPLE'
- "таблица" = 'Упрек'
- Перегородки = NULL
- тип = 'ссылка'
- possible_keys = 'User_ID, User_ID_2'
- "ключ" = 'User_ID'
- key_len = '8'
- исх = 'Const'
- "строки" = 298
- filter = 100
- Дополнительно = 'Использование условия индекса';
Переменные:
'innodb_buffer_pool_size', Value = '4294967296';
Чтобы сделать его более четким, я звоню запрос SELECT, в цикле питона. Каждая итерация выполняется очень быстро, если я уже выполнил запрос SELECT для этого пользователя, но в то же время очень медленный.Не имеет значения, было ли пропущено ОЗУ (перезагрузка сервера) или нет.
Спасибо.
[Должен ли я обвинять кеширование, да!] (Http://shouldiblamecaching.com/) ':)' –
Черт, вот что я не хотел слышать !!! означает, что тогда невозможно оптимизировать? спасибо, хотя – ylnor
На самом деле этот выглядит как встроенная функция оптимизации. Лол. –