1
Vývoj / Re:Indexování v databázi
« kdy: 06. 12. 2019, 10:10:36 »
Zdravím, pokud mám dotaz zobrazený dole, kde :minDate je objekt typu Date (minimální den v měsíci v daném roce) a :maxDate je objekt typu Date (maximálně den v měsíci v daném roce), tak jak by měli být provedeny indexy na ten datum? Měl by být index pouze uploadDatetime A zvlášt activeStartTime nebo by měl být vytvořen kompozitní index na uploadDatetime a activeStartTime (tedy tohle by tvořilo jeden index...)
Ta samá otázka u toho druhého dotaz. Jak v tomto případě vytvořit index na datumy? Udělat kompozitní dva uploadDatetime + approvalEndTime a druhý activeStartTime + activeEndTime?
Děkuji
Kód: [Vybrat]
TypedQuery<Document> q3 = entityManager.createQuery("SELECT d FROM Document d " +
"INNER JOIN d.documentsForUsers ud WHERE (d.documentState.id != 0 AND" +
" ud.sharingType = 1" +
" AND ud.user.email=:email AND ud.approval != 2 AND" +
" d.uploadDatetime between :minDate and :maxDate)" +
" OR(d.documentState.id = 1 AND ud.sharingType.id=2" +
" AND ud.user.email=:email" +
" AND current_timestamp > d.activeStartTime AND ud.approval != 2" +
" AND d.activeStartTime between :minDate AND :maxDate) ORDER BY CASE WHEN ud.sharingType=1 THEN d.uploadDatetime "+
" ELSE d.activeStartTime END DESC", Document.class);Ta samá otázka u toho druhého dotaz. Jak v tomto případě vytvořit index na datumy? Udělat kompozitní dva uploadDatetime + approvalEndTime a druhý activeStartTime + activeEndTime?
Kód: [Vybrat]
TypedQuery<Document> q2 = entityManager.createQuery("SELECT d FROM Document d " +
"INNER JOIN d.documentsForUsers ud WHERE (d.documentState.id = 2 AND ud.sharingType = 1" +
" AND ud.user.email=:email" +
" AND current_timestamp between d.uploadDatetime AND d.approvalEndTime AND ud.approval=2)" +
" OR(d.documentState.id = 1 AND ud.sharingType.id=2 AND ud.user.email=:email AND current_timestamp " +
"between d.activeStartTime AND d.activeEndTime AND ud.approval=2) ORDER BY CASE WHEN ud.sharingType=1 THEN d.uploadDatetime " +
"ELSE d.activeStartTime END DESC"
, Document.class);Děkuji
