Query:quote:MySQL gaf een lege resultatenset terug (0 rijen). (query duurde 157.0733 sec)
1 2 3 4 5 6 7 | SELECT b . * FROM video_tag_link bt, videos b, tags t WHERE bt.tag_id = t.tag_id AND (t.name IN ('home', 'video')) AND b.id = bt.video_id GROUP BY b.id HAVING COUNT( b.id ) =2 |
Dat kan sneller toch?quote:Showing rows 0 - 29 (213 total, query duurde 51.7825 sec)
Voer de query eens uit met EXPLAIN aan het begin.quote:Op maandag 19 januari 2015 12:08 schreef Chandler het volgende:
ff een queries gespeeld, is niet gemakkelijk zeg(zonder specifieke zoekplatformen, maar moet toch echt wel sneller kunnen).
Showing rows 0 - 29 (213 total, query duurde 51.7825 sec)
Dat kan sneller toch?
quote:Op maandag 19 januari 2015 12:21 schreef Aether het volgende:
[..]
Voer de query eens uit met EXPLAIN aan het begin.
Dan kun je zien waar het beste indices geplaatst kunnen worden.
1 2 3 | 1 SIMPLE t range PRIMARY,name,id name 34 NULL 2 Using index condition; Using temporary; using filesort 1 SIMPLE b ALL PRIMARY NULL NULL NULL 7158720 Using join buffer (Block Nested Loop) 1 SIMPLE bt eq_ref video_id video_id 8 a.b.id,a.t.tag_id 1 Using index |
Ik zal het eens bekijken en uitproberenquote:Op maandag 19 januari 2015 13:13 schreef Monolith het volgende:
Het ziet er in ieder geval uit als een hele kromme query. Gebruik je nou IN en HAVING om enerzijds te selecteren op twee tag names en anderzijds te checken of ze allebei gevonden worden? In dat geval zou ik eens kijken of je middels WHERE EXISTS niet sneller resultaat krijgt.
Bij dezequote:Verder valt er vrij weinig te zeggen over je query zonder de onderliggende db structuur te kennen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | CREATE TABLE IF NOT EXISTS `tags` ( `tag_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, PRIMARY KEY (`tag_id`), UNIQUE KEY `name` (`name`), KEY `id` (`tag_id`,`name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=200938 ; CREATE TABLE IF NOT EXISTS `videos` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `tags` varchar(255) NOT NULL, -- tijdelijk voor andere tests (zelfde inhoud als beide andere tabellen) `title` varchar(255) NOT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `tags` (`tags`), FULLTEXT KEY `title` (`title`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7158721 ; CREATE TABLE IF NOT EXISTS `video_tag_link` ( `video_id` int(10) unsigned NOT NULL, `tag_id` int(10) unsigned NOT NULL, UNIQUE KEY `video_id` (`video_id`,`tag_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- 48miljoen records |
Je mist een index in je koppeltabelquote:Op maandag 19 januari 2015 17:09 schreef Chandler het volgende:
[..]
Ik zal het eens bekijken en uitproberen
[..]
Bij deze
[ code verwijderd ]
1 | ALTER TABLE `video_tag_links` ADD INDEX `tag_id` (`tag_id`); |
Er wordt een full table scan gedaan bij een query waar je dat niet verwacht, dus de indices staan niet goed. Dat die full table scan op de video's-tabel wordt gedaan en niet op de koppeltabel, komt omdat die laatste tabel veel groter is (7mln vs 48 mln rijen).quote:Op maandag 19 januari 2015 19:41 schreef Monolith het volgende:
Volgens mij doet hij altijd een query op beide velden in de index, dus zou dat op zich goed moeten gaan. Hoewel het lang geleden is dat ik me in detail met indices in MySQL heb beziggehouden.
Ah, ik had de explain even gemist.quote:Op maandag 19 januari 2015 19:49 schreef Light het volgende:
[..]
Er wordt een full table scan gedaan bij een query waar je dat niet verwacht, dus de indices staan niet goed. Dat die full table scan op de video's-tabel wordt gedaan en niet op de koppeltabel, komt omdat die laatste tabel veel groter is (7mln vs 48 mln rijen).
De tabel waar die regel in staat heeft een foreign key constraint met de unieke naam image_fk. De waarde in de kolom image_id verwijst naar een waarde in de kolom image_id in de tabel image. Je kunt dus geen waarde opslaan die niet ook in image.image_id staat.quote:Op maandag 19 januari 2015 20:18 schreef Chandler het volgende:
-- gelijk een vraagje
Kan iemand mij deze regel uitleggen?
CONSTRAINT `image_fk` FOREIGN KEY (`image_id`) REFERENCES `image` (`image_id`),
1 2 3 | 1 SIMPLE t range PRIMARY,name,id name 34 NULL 2 Using index condition; Using temporary; using filesort 1 SIMPLE bt ref PRIMARY,video_id video_id 4 asexfilmzoeker1.t.id 488020 Using index 1 SIMPLE b eq_ref PRIMARY PRIMARY 4 asexfilmzoeker1.bt.video_id 1 NULL |
1 2 3 4 5 | Actie Sleutelnaam Type Unieke waarde Gecomprimeerd Kolom Kardinaliteit Collatie Leeg Opmerking Wijzigen Wijzigen Verwijderen Verwijderen PRIMARY BTREE Ja Nee video_id A Nee tag_id 48802076 A Nee Wijzigen Wijzigen Verwijderen Verwijderen video_id BTREE Nee Nee tag_id A Nee video_id A Nee |
1 2 3 4 5 | Actie Sleutelnaam Type Unieke waarde Gecomprimeerd Kolom Kardinaliteit Collatie Leeg Opmerking Wijzigen Wijzigen Verwijderen Verwijderen PRIMARY BTREE Ja Nee id 44810 A Nee Wijzigen Wijzigen Verwijderen Verwijderen name BTREE Ja Nee name 44810 A Nee Wijzigen Wijzigen Verwijderen Verwijderen id BTREE Nee Nee id 44810 A Nee name 44810 A Nee |
1 2 3 4 5 | Actie Sleutelnaam Type Unieke waarde Gecomprimeerd Kolom Kardinaliteit Collatie Leeg Opmerking Wijzigen Wijzigen Verwijderen Verwijderen PRIMARY BTREE Ja Nee id 7158720 A Nee Wijzigen Wijzigen Verwijderen Verwijderen seconds BTREE Nee Nee seconds 73801 A Nee Wijzigen Wijzigen Verwijderen Verwijderen tags FULLTEXT Nee Nee tags 1 Nee Wijzigen Wijzigen Verwijderen Verwijderen title FULLTEXT Nee Nee title 1 Nee |
Die staat in mijn 1e quote.quote:Op vrijdag 23 januari 2015 18:47 schreef TwenteFC het volgende:
Een ander type database gebruiken?
Zou je ook eens een explain van je query kunnen posten?
7 miljoen? beetje te veel, maar je zit aardig in de buurtquote:
Welke storage engine gebruik je? Heb je bijvoorbeeld al InnoDB geprobeerd?quote:Op vrijdag 23 januari 2015 19:47 schreef Chandler het volgende:
[..]
Die staat in mijn 1e quote.
Het rare is namelijk dat zoeken in tabel videos, veld tags (like %tag%) vele malen sneller is dan het uitlezen van tags tabellen (normaliseren).op dit moment geen mogelijkheid om een andere server/scripts te gebruiken anders dan MySQL.......
Wil wel even een dump maken hoorstrip ik alle onnodige informatie, heb je een import sql bestand van 4GB
![]()
En waarom zou dat gaan helpen? Zoals al aangegeven is de beste optie om gewoon een fatsoenlijk zoekplatform te gebruiken, maar die mogelijkheid heeft hij niet.quote:Op zaterdag 24 januari 2015 11:47 schreef robin007bond het volgende:
Sowieso MariaDB in plaats van MySQL
Het was meer een zijspoor.quote:Op zaterdag 24 januari 2015 11:58 schreef Monolith het volgende:
[..]
En waarom zou dat gaan helpen? Zoals al aangegeven is de beste optie om gewoon een fatsoenlijk zoekplatform te gebruiken, maar die mogelijkheid heeft hij niet.
1 2 3 4 5 6 7 8 | explain SELECT * FROM videos o LEFT OUTER JOIN video_tag_link ot ON ot.video_id = o.id LEFT OUTER JOIN tags t ON t.tag_id = ot.tag_id WHERE t.name IN ('home','alone') GROUP BY o.id HAVING COUNT(DISTINCT t.name) = 2 |
quote:Op zaterdag 24 januari 2015 13:28 schreef Chandler het volgende:
Jeej,
Volgende query doet het best
[ code verwijderd ]
Doet ook aan filesort maar vind in totaal 5638 resultaten in ruim 1 seconde...
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.The people who lost my respect will never get a capital letter for their name again.
Like trump...
Inmiddels een workaround gevonden, nu blijf ik weer hangen bij de melding "Notice: Array to string conversion". Als iemand dat bekend voor komt, laat even weten hoe je dat hebt opgelostquote:Op zondag 25 januari 2015 00:10 schreef henrivo het volgende:
Jeuw. Symfony2 kenners hier?
Wanneer ik form_row a en b oproep in een view, worden direct eronder ook meteen form_row c en d weergegeven. Terwijl ik die niet wil laten zien in die view.
{{ form_start(form) }}
{{ form_row(form.a) }}
{{ form_row(form.b) }}
{{ form_end(form) }}
Even als voorbeeldje hoe ik het heb
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
quote:Op zondag 25 januari 2015 11:09 schreef henrivo het volgende:
[..]
Inmiddels een workaround gevonden, nu blijf ik weer hangen bij de melding "Notice: Array to string conversion". Als iemand dat bekend voor komt, laat even weten hoe je dat hebt opgelostDat komt door de regel:SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.De documentatie schrijft voor:
1 {{ form_end{form) }} Array to string conversion notice komt simpelweg doordat je ergens een array als argument meegeeft terwijl er een string wordt verwacht (zonder code gaan wij niet kunnen uitvinden waar dat vandaan komt).quote:form_end()
Renders the end tag of the form and any fields that have not yet been rendered, in case you rendered each field yourself. This is useful for rendering hidden fields and taking advantage of the automatic CSRF Protection.
Helemaal overheen gelezen, domdomdomquote:Op zondag 25 januari 2015 17:59 schreef Diabox het volgende:
[..]
Dat komt door de regel:
[ code verwijderd ]
Zo ver was ik alquote:De documentatie schrijft voor:
[..]
Array to string conversion notice komt simpelweg doordat je ergens een array als argument meegeeft terwijl er een string wordt verwacht (zonder code gaan wij niet kunnen uitvinden waar dat vandaan komt).
SPOILEROm spoilers te kunnen lezen moet je zijn ingelogd. Je moet je daarvoor eerst gratis Registreren. Ook kun je spoilers niet lezen als je een ban hebt.
Nee, want MySQL is totaal niet de plaats om allerlei logica in te gaan dumpen.quote:Op donderdag 29 januari 2015 23:52 schreef TwenteFC het volgende:
Gewoon omdat ik het hier eigenlijk nooit voorbij zie komen,
maar wie hier gebruikt er wel eens op regelmatige basis triggers, functies en dergelijke in mysql?
Soms kan het vanuit performance oogpunt handig zijn. Zeker ORM is lang niet altijd optimaal efficiėnt. Nou merk je dat bij een gemiddeld websiteje niet, maar als het om wat grootschaligere applicaties gaat, dan zijn dat soort zaken wat belangrijker.quote:Op vrijdag 30 januari 2015 13:16 schreef Intrepidity het volgende:
[..]
Nee, want MySQL is totaal niet de plaats om allerlei logica in te gaan dumpen.
15 is imo te weinig, ik zit daar een paar euro boven met 6 jaar ervaring. Het werk is op HBO niveau maar ik ben er tussen gerold met een MBO4 diploma.quote:Op zaterdag 31 januari 2015 01:43 schreef Diabox het volgende:
Botte vraag en niet geheel on-topic (maar hier redelijke kans op antwoorden): wat verdienen jullie ongeveer als webprogrammeur? Ik heb een salarisaanbod gekregen die ik maar moeilijk kan plaatsen. Ik heb bijna 4 jaar professionele werkervaring als web developer, en heb daarnaast een BSc en MSc (informatica en SE); 15 eu p/u. Leek mij niet in verhouding met mijn ervaring en opleidingen (werk momenteel daar op freelance basis voor een veelvoud van dat bedrag).
nou dat 'crisis'-verhaal gaat echt niet in elke sector op hoor. Ik ben twee jaar geleden geswitched van werkgever en had gewoon keuze... En wij willen op het werk al geruime tijd en goede programmeur erbij maar die zijn heel lastig te vindenquote:Op zaterdag 31 januari 2015 06:16 schreef Iwanius het volgende:
Anderzijds moet Diabox ook rekening houden dat in deze tijd het hebben van een vaste baan ook wel een lekker zekerheidje is want wil jij niet, dan neemt men met gemak (gezien het gigantische aanbod van werklozen in alle sectoren) een ander.
Mijn bijbaan als touringcarchauffeur op MBO4 niveau heeft dat zo ongeveer als minimum (bruto)quote:Op zaterdag 31 januari 2015 01:43 schreef Diabox het volgende:
Botte vraag en niet geheel on-topic (maar hier redelijke kans op antwoorden): wat verdienen jullie ongeveer als webprogrammeur? Ik heb een salarisaanbod gekregen die ik maar moeilijk kan plaatsen. Ik heb bijna 4 jaar professionele werkervaring als web developer, en heb daarnaast een BSc en MSc (informatica en SE); 15 eu p/u. Leek mij niet in verhouding met mijn ervaring en opleidingen (werk momenteel daar op freelance basis voor een veelvoud van dat bedrag).
Ik krijg toch echt wekelijks vele aanbiedingen. Dat is wel voornamelijk in de Java hoek.quote:Op zaterdag 31 januari 2015 06:16 schreef Iwanius het volgende:
Anderzijds moet Diabox ook rekening houden dat in deze tijd het hebben van een vaste baan ook wel een lekker zekerheidje is want wil jij niet, dan neemt men met gemak (gezien het gigantische aanbod van werklozen in alle sectoren) een ander.
Ik moet de eerste werkloze programmeur nog tegenkomen, hoor.quote:Op zaterdag 31 januari 2015 06:16 schreef Iwanius het volgende:
Anderzijds moet Diabox ook rekening houden dat in deze tijd het hebben van een vaste baan ook wel een lekker zekerheidje is want wil jij niet, dan neemt men met gemak (gezien het gigantische aanbod van werklozen in alle sectoren) een ander.
Ik zit met ~7 jaar (parttime @ ~20 uur per week) ervaring op ongeveer 13 euro per uurquote:Op zaterdag 31 januari 2015 02:04 schreef bondage het volgende:
15 is imo te weinig, ik zit daar een paar euro boven met 6 jaar ervaring. Het werk is op HBO niveau maar ik ben er tussen gerold met een MBO4 diploma.
Zijn dat vaste banen die je aangeboden krijgt?quote:Op zaterdag 31 januari 2015 10:52 schreef Monolith het volgende:
[..]
Ik krijg toch echt wekelijks vele aanbiedingen. Dat is wel voornamelijk in de Java hoek.
Yep. Dan moet je natuurlijk nog wel een sollicitatieprocedure door, maar toch.quote:Op zaterdag 31 januari 2015 11:23 schreef Robuustheid het volgende:
[..]
Zijn dat vaste banen die je aangeboden krijgt?
Die worden er tegenwoordig gelukkig wel vrij snel uitgegooidquote:Op zaterdag 31 januari 2015 11:53 schreef Tijn het volgende:
Er zijn misschien meer PHP en front-enders, maar een groot deel daarvan is tamelijk clueless en zijn eigenlijk meer hobbyisten dan serieuze programmeurs.
Inderdaad, de prutsers vallen toch vrij snel door de mand. Als wij bij de sollicitatie twijfelen over het niveau laten we ze een kleine opdracht doen. En anders heb je inderdaad de proeftijd nog...quote:Op zaterdag 31 januari 2015 11:57 schreef CrashO het volgende:
[..]
Die worden er tegenwoordig gelukkig wel vrij snel uitgegooidHeb bij het huidige bedrijf waar ik zit al een handvol programmeurs de proeftijd niet zien overleven omdat ze er niks van bakten of stukken script gingen copy-pasten van random sites
.
Oh zeker, ik heb ook wel wat werk in die hoek gedaan en heel vaak was het echt huilen met de pet op. Het verschil tussen de Java community en de PHP community is qua professionaliteit sowieso wel aanzienlijk hoor.quote:Op zaterdag 31 januari 2015 11:53 schreef Tijn het volgende:
Er zijn misschien meer PHP en front-enders, maar een groot deel daarvan is tamelijk clueless en zijn eigenlijk meer hobbyisten dan serieuze programmeurs.
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |