Форум программистов, компьютерный форум, киберфорум
MySQL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
90 / 40 / 17
Регистрация: 24.10.2015
Сообщений: 574
1

Оптимизация запроса

02.09.2017, 22:22. Показов 436. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Идет поиск по полю date_added(TIMESTAMP)
SQL
1
... WHERE DATE(date_added) = '2017-09-02'
Как и предполагал добавление индекса для этого поля ничего не дало, EXPLAIN говорит что для поиска используются имеющиеся все строки. Что можно сделать для оптимизации, поле должно содержать дату и время

Добавлено через 23 минуты
Придумал!
SQL
1
2
3
SELECT * FROM `table` WHERE `date_added` = DATE_FORMAT('2017-09-02', '%Y-%m-%d %H:%i:%s')
#или
SELECT * FROM `table` WHERE `date_added` = NOW()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2017, 22:22
Ответы с готовыми решениями:

Оптимизация запроса
SELECT t.id AS t0_c0, t.catid AS t0_c1, t.title AS t0_c2, t.object AS t0_c3, t.description AS...

оптимизация запроса
Помогите оптимизировать такой запрос.. Выполняется около секунды..использую сортировку по 2...

Оптимизация запроса
Здравствуйте, проблема в следующем, время генерации страницы без запроса ниже: 0,00702, с ним около...

Оптимизация запроса
Добрый день, есть вот такой запрос: select id, content, vote from table1 where DATE_FORMAT(date,...

9
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
02.09.2017, 22:22 2
Цитата Сообщение от rodigy Посмотреть сообщение
Что можно сделать для оптимизации
Вариант первый - работать с данными в том виде, в котором они проиндексированы, то ваш запрос выше, нужно было бы изменить, например, таким образом:
MySQL
1
... WHERE `date_added` BETWEEN '2017-09-02 00:00' AND '2017-09-02 23:59'
Вариант второй - создавать поля с соответствующим форматом данных, которые будут принимать участие в поиске или в условии выборки. Т.е. в вашем случае, можно добавить еще одно поле с типом DATE.
0
90 / 40 / 17
Регистрация: 24.10.2015
Сообщений: 574
02.09.2017, 22:24  [ТС] 3
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Т.е. в вашем случае, можно добавить еще одно поле с типом DATE.
Это лишние затраты на память, как видно я пошел по первому пути
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
02.09.2017, 22:26 4
Цитата Сообщение от rodigy Посмотреть сообщение
Придумал!
Вы уверены, что такие варианты дадут вам ожидаемый результат?
0
90 / 40 / 17
Регистрация: 24.10.2015
Сообщений: 574
02.09.2017, 22:49  [ТС] 5
Lazy_Den, Я в основном буду использовать такие запросы
SQL
1
SELECT * FROM `table` WHERE `date_added` >= NOW() - INTERVAL 1 DAY
Проверил на таком запросе индексы используются, и на след. запросе тоже использовались
SQL
1
SELECT * FROM `table` WHERE `date_added` >= DATE_FORMAT('2017-09-02', '%Y-%m-%d %H:%i:%s')  - INTERVAL 1 DAY
А вот если ставить <= вместе с DATE_FORMAT то идет полный перебор, странно, почему так?
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
02.09.2017, 22:55 6
Цитата Сообщение от rodigy Посмотреть сообщение
Проверил на таком запросе индексы используются
Последний мой вопрос был не про индексы, а про результат. Раз результат устраивает, то пусть будет так.
P.S.
Цитата Сообщение от rodigy Посмотреть сообщение
Это лишние затраты на память
Системщик из меня, конечно, так себе, но по-моему на дисковое пространство. Да и не такие уж большие затраты. Около 8К записей - это около 120КБ. К тому же, индекс в данном случае будет более оптимальный, т.к. мы исключаем не нужное при выборке время и весить он будет меньше.

Добавлено через 4 минуты
Цитата Сообщение от rodigy Посмотреть сообщение
если ставить <= вместе с DATE_FORMAT то идет полный перебор
Не заметил такого (см. "View Execution Plan" по результатом)
0
90 / 40 / 17
Регистрация: 24.10.2015
Сообщений: 574
02.09.2017, 23:06  [ТС] 7
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Цитата Сообщение от rodigy Посмотреть сообщение
если ставить <= вместе с DATE_FORMAT то идет полный перебор
Не заметил такого (см. "View Execution Plan" по результатом)
Я об результатах rows EXPLAIN, результат выдачи нормальный
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
02.09.2017, 23:10 8
Цитата Сообщение от rodigy Посмотреть сообщение
Я об результатах rows EXPLAIN
И я про то же
0
90 / 40 / 17
Регистрация: 24.10.2015
Сообщений: 574
02.09.2017, 23:15  [ТС] 9
Lazy_Den, Вот изменил первую дату и запрос и теперь используются все 4 строки в explain
http://sqlfiddle.com/#!9/0d25f/1
0
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
03.09.2017, 00:08 10
Цитата Сообщение от rodigy Посмотреть сообщение
теперь используются все 4 строки в explain
Да, вижу, но причину объяснить не возьмусь. Скорее помогут мэтры мускула в соответствующем разделе.
0
03.09.2017, 00:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2017, 00:08
Помогаю со студенческими работами здесь

Оптимизация запроса
Здравствуйте. Ломаю голову об оптимизации запроса. Есть две таблицы CREATE TABLE `test` (...

Оптимизация запроса
Здравствуйте! Столкнулся с такой проблемой, мне нужно выполнить запрос вида: SELECT `id` FROM...

Оптимизация запроса
Добрый день. Подскажите как по человечески построить запрос: нужно получать данные по сотрудникам...

Оптимизация запроса
Здравствуйте!! Есть таблица с полем rfid. в Нем через запятую хранятся записи (не более...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru