[TYPO3-dam-devel] DAM, slow queries and DBAL

Dan Osipov dosipov at phillyburbs.com
Wed Oct 29 19:07:35 CET 2008


First - wrong list to discuss this. It should be posted to the t.p.dam

Second - I have no opinion on the views/no views issue, so I'm for 
anything that improves performance. But this would be a radical change 
to the DAM, and would have to be implemented in 1.2
I noticed some other file operations that need improvement, and was 
going to work on them after 1.1 is released.

Dan Osipov
Calkins Media
http://danosipov.com/blog/

Peter Kuehn [wmdb] wrote:
> Hi list,
> 
> we are currently trying to solve a problem that imho should be solved in 
> general.
> 
> One of the things editors love when working with DAM is the posibility 
> to say "show me files that are categorised with category a or b or c".
> 
> The generated query reads (as you all know)
> 
> SELECT [fieldlist]
> FROM tx_dam
> LEFT JOIN tx_dam_mm_cat AS tx_dam_mm_cat_a ON 
> tx_dam.uid=tx_dam_mm_cat_a.uid_local
> LEFT JOIN tx_dam_mm_cat AS tx_dam_mm_cat_b ON 
> tx_dam.uid=tx_dam_mm_cat_b.uid_local
> LEFT JOIN tx_dam_mm_cat AS tx_dam_mm_cat_c ON 
> tx_dam.uid=tx_dam_mm_cat_c.uid_local
> , tx_dam_cat
> WHERE 1
> AND tx_dam.pid IN (1) AND tx_dam.sys_language_uid=0
> AND tx_dam.file_status!=255
> AND (tx_dam_mm_cat_a.uid_foreign IN (7)
> OR tx_dam_mm_cat_b.uid_foreign IN (8)
> OR tx_dam_mm_cat_c.uid_foreign IN (16))
> AND tx_dam.deleted=0 AND tx_dam_cat.deleted=0;
> 
> and is fired twice, first to "COUNT(DISTINCT tx_dam.uid) as count" and 
> then again to get the rows if there are any.
> 
> Having 18.526 DAM-records with 20.068 relations to 200 categories it 
> takes 13 min 15.80 sec to return "36" and again 11 min 1.03 sec to 
> return the 36 rows on our quadcore/8GB RAM devserver.
> 
> 
> Basically the query can be rewriten to
> 
> SELECT tx_dam.*
> FROM tx_dam
> LEFT JOIN tx_dam_mm_cat ON tx_dam_mm_cat.uid_local = tx_dam.uid
> LEFT JOIN tx_dam_cat ON tx_dam_mm_cat.uid_foreign = tx_dam_cat.uid
> WHERE tx_dam.deleted = 0 AND tx_dam.pid IN (1) AND tx_dam_cat.deleted=0
> GROUP BY tx_dam_mm_cat.uid_local
> having (find_in_set(7,GROUP_CONCAT(tx_dam_cat.uid)) OR 
> find_in_set(8,GROUP_CONCAT(tx_dam_cat.uid)) OR 
> find_in_set(16,GROUP_CONCAT(tx_dam_cat.uid)))
> 
> which returns the same 36 rows in 0.31 sec.
> 
> To get it to return "36" with a count() it would have to be implemented 
> as a view.
> On the one hand working with views means breaking with DBAL compliance - 
> we know. On the other looking at class.ext_update.php DAM is already not 
> DBAL compliant - if we´re right.
> 
> We all know about the hassle with introducing new stuff to TYPO3 and 
> still being "compatible" with low cost webhosting, but since we rose the 
> system requirements to PHP5 and MySQL5 in the last Major version (if I 
> recall Ingo correct) I don't see the problem in introducing views (given 
> the 10000000...(add lot's of zeroes here)..00% performance increase.
> 
> On the performance list Mathias and others already talked about dropping 
> support for systems that do not allow mysql users to create views or 
> stored procedures - with the result "enterprise needs enterprise access 
> levels to the system".
> 
> Even if we don't do this on the "big" scope of TYPO3 itself, at least 
> DAM is mostly being used by enterprise clients (or at least people who 
> know about the power of DAM) DAM should make use of features like this.
> 
> /discuss :)
> 
> greetinx
> pekue and mattes


More information about the TYPO3-team-dam mailing list