Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с подзапросом. Оптимизировать / 12 сообщений из 12, страница 1 из 1
02.02.2014, 16:51:18
    #38546404
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
Таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE `foto` (
  `id` int(11) NOT NULL auto_increment,
  `idSD` int(11) NOT NULL default '0',
  `size` varchar(255) default NULL,
  `dateUP` datetime default NULL,
  `description` varchar(255) default NULL,
  `idUser` int(11) default NULL,
  `dir` int(11) default NULL,
  `sSizeX` int(11) default NULL,
  `sSizeY` int(11) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `idsd` (`idSD`,`id`)
) ENGINE=MyISAM AUTO_INCREMENT=28929 DEFAULT CHARSET=utf8;



Сам запрос:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT fotot.*, tags.id AS idTag, tags.name AS nameTag 
FROM
 
(SELECT * 
FROM foto ORDER BY id DESC LIMIT 27816, 12) AS fotot 

LEFT OUTER JOIN fototag ON fotot.id = fototag.`idFoto` 
LEFT OUTER JOIN tags ON fototag.idTag = tags.id
ORDER BY fototag.id



Explain:

Код: sql
1.
2.
3.
4.
1	"PRIMARY"	"<derived2>"	"ALL"					27828	"Using temporary; Using filesort"
1	"PRIMARY"	"fototag"	"ref"	"idFoto"	"idFoto"	"4"	"fotot.id"	3	
1	"PRIMARY"	"tags"	"eq_ref"	"PRIMARY"	"PRIMARY"	"4"	"table.fototag.idTag"	1	
2	"DERIVED"	"foto"	"ALL"					        27851	"Using filesort"



В результате запрос выполняется 0,09 сек, а всего записей в табилце foto - около 27 тыс. Версия mySQL 5.6.16
...
Рейтинг: 0 / 0
03.02.2014, 10:37:34
    #38546862
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
А если запустить только внутренний подзапрос, он тоже будет с using filesort?
...
Рейтинг: 0 / 0
03.02.2014, 10:42:56
    #38546864
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
авторSELECT *
FROM foto where id<= 27816 ORDER BY id DESC LIMIT 27816, 12
или больше? сами короче подумайте.
...
Рейтинг: 0 / 0
03.02.2014, 20:46:49
    #38547733
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
tanglirА если запустить только внутренний подзапрос, он тоже будет с using filesort?
Да

ScareCrow...сами короче подумайте.
Так как сортировка от большего к меньшему, то запрос получается примерно такой:

Код: sql
1.
2.
SELECT * 
FROM foto WHERE id > 920 ORDER BY id DESC LIMIT 27816, 12


и опять mysql проходит почти по всей таблице, да и число 920 я взял видя все айдишники, а как реально получить его я не представляю
...
Рейтинг: 0 / 0
03.02.2014, 20:53:03
    #38547743
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
А так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT fotot2.*, tags.id AS idTag, tags.name AS nameTag 
FROM
 
(SELECT id 
FROM foto ORDER BY id DESC LIMIT 27816, 12) AS fotot1 
LEFT JOIN foto fotot2 ON fotot2.id=fotot1.id
LEFT OUTER JOIN fototag ON fotot1.id = fototag.`idFoto` 
LEFT OUTER JOIN tags ON fototag.idTag = tags.id
ORDER BY fototag.id
...
Рейтинг: 0 / 0
03.02.2014, 23:14:30
    #38547878
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
miksoftА так?
Среднее время выполнения ~ 0.02 сек. Редно, но бывает около 0.04 сек, не знаю, с чем это связано
...
Рейтинг: 0 / 0
04.02.2014, 05:17:54
    #38547993
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
niranaи опять mysql проходит почти по всей таблицену дык если в таблице 27к записей, и задан офсет в те же 27к записей, то чего же вы хотите?
...
Рейтинг: 0 / 0
04.02.2014, 09:25:12
    #38548070
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
niranamiksoftА так?
Среднее время выполнения ~ 0.02 сек.Ну так устраивает такой результат или нет?
Если нет, то план в студию.niranaРедно, но бывает около 0.04 сек, не знаю, с чем это связаноС погрешностью измерения, например. Многие проги в Windows используют грубый таймер, у которого дискретность 16мс.
Или, если где-то мимо кэша промахнулись, то одно дисковое обращение - те же 10-20 мс.
...
Рейтинг: 0 / 0
04.02.2014, 14:12:56
    #38548609
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
miksoft,
Сейчас время устраивает, но если возможно ещё быстрее, то изменилось
в плане только последняя строка: был filesort стал
using index
...
Рейтинг: 0 / 0
04.02.2014, 14:14:03
    #38548613
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
miksoft,
Сейчас время устраивает, но если возможно ещё быстрее, то изменилось
в плане только последняя строка: был filesort стал
using index
...
Рейтинг: 0 / 0
04.02.2014, 14:18:24
    #38548628
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
niranaв плане только последняя строка: был filesort стал
using indexСтранно, по идее должна была еще строка добавиться. Таки покажите новый план целиком, плиз.
...
Рейтинг: 0 / 0
04.02.2014, 21:48:28
    #38549430
nirana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с подзапросом. Оптимизировать
Вот
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос с подзапросом. Оптимизировать / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]