Оптимизировать mySQL запрос

128
02 августа 2019, 18:30

Подскажите Оптимально ли составлен запрос:

 SELECT *
 FROM (
     (`tbl_projects`
 LEFT JOIN `tbl_files`
     ON ((`file_isforType` = 1) AND `file_isforID`=`proj_uid`) )
 INNER JOIN `tbl_users`
     ON `proj_InitiatorUsrID` = `usr_UID` )
 ORDER BY `file_uid` DESC LIMIT 0 , 15

Я прогонял его через EXPLAIN и обнаружил что несмотря на все мои усилия в первой строчке индекс не используется!(

насколько я помню из учебников это плохо. и тип перебора = all -

худший из всех возможных означающий итерацию по каждойбожей записи в этой таблице.

]1 По формуле rows получается 4x1x1 итераций на строку хотя ожидалось бы 1x1x[0..files_count].

То что у меня получилось - это нормально или плохо или хорошо. Я что то не вьеду)

Пожалуйста подкиньте цитат для вразумления или Ваших личных профипояснений почему тут что да как..

view () кспорт sql прилагается tbl_users

tbl_files.sql

tbl_projects.sql

Идея базы простая. задания.

Юзер публикует задание. К заданию подключает или не подключает фотки.

каждое задание имеет юзера-создателя каждое фото имеет задание-хозяина.

не каждый юзер обязан создавать задание не каждое задание имеет файлы.

связь такая на один проект - один юзер - на один проект - от 0 до X файлов

Результат выполнения запроса образно говоря такой:

 proj1 | user1 | photo1
 proj1 | user1 | photo2
 proj1 | user1 | photo3
 proj2 | user1 | photo4
 proj2 | user1 | photo5
 proj3 | user2 | photo6
 proj4 | user1 | null
 proj5 | user1 | photo7
 proj5 | user1 | photo8
 proj6 | user2 | null

php код идет сверху вниз строчка за строчкой и соединяет всё это в html

 proj1 - user1 - 3 photos
 proj2 - user1 - 2 photos
 proj3 - user2 - 1 photo
 proj4 - user1 -  no photos
 proj5 - user1 - 2 photos
 etc

table_files is build in next logic:

 file_uid | file_ownerID | file_isforType| file_isforID
 file_uid PRIMARY AI
 file_ownerID  reference to PRIMARY at table_users
 file_isforType- smallint 1..9
 indicates type of THING which this file was attached to.
  eg
 1 = _TheProject as project photo
 2 = _TheUserProfile as users photo
 3 = _TheMessage as attachment
 file_ResourceID - unique id of that very thing, whose type specified in file_isforType.

eg

 if (file_isWhatfor=_TheProject) AND (file_ResourceID=3)    ->> to the proj#3
 if (file_isWhatfor=_TheUserProfile) AND (file_ResourceID=3)    ->> to the user#3
 if (file_isWhatfor=_TheMessage) AND (file_ResourceID=3)    ->> to the msg#3
READ ALSO
СУБД и база(ы) данных это разные вещи?

СУБД и база(ы) данных это разные вещи?

Система управления базами данных (СУБД) – это совокупность языковых и программных средств, предназначенных для создания, ведения и совместного...

107
Uncaught TypeError: Cannot read property 'addEventListener' of null

Uncaught TypeError: Cannot read property 'addEventListener' of null

Собственно форма входа на сайт Вылезает ошибка которая не позволяет выполнить скрипт,не понятно как у меня может быть тип nullКак исправить...

115
Запретить ввод в input пробелы, пока не введен другой символ

Запретить ввод в input пробелы, пока не введен другой символ

у меня есть форма с текстовым полем, никаких ограничений на возможные вводимые символы нетНо я хочу сделать так, чтобы нельзя было вводить...

107