Ik heb een probleem met een view die in mysql vreselijk inefficient werkt. Het vreemde is dat wanneer ik de query zelf invoer i.p.v. de view te gebruiken, het geheel wel snel werkt.
De view:
Deze view roep ik dan vervolgens aan als
Dit werkt, maar is vreselijk traag. Wanneer ik nu als query het volgende opgeef:
krijg ik hetzelfde resultaat, alleen dan een heel stuk sneller. Nu wil ik, vanwege het grote aantal tabellen in de db, graag met views werken. Op deze manier heeft dat echter weinig zin.
MySQL versie is mysql-5.0.26
De view:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| CREATE VIEW person_info ( picture, personid, name_first, name_suffix, name_last, birthday, age, gsm, license, status, work_count ) AS SELECT mFaces.filename AS picture, person.pid AS personid, person.firstname AS name_first, person.suffix AS name_suffix, person.lastname AS name_last, person.birthdate AS birthday, DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(person.birthdate)), '%Y')+0 AS age, person.phoneMob AS gsm, person.license AS license, peopleStatusOptions.name AS status, COUNT(DISTINCT(mScoreCard.mSCid)) AS work_count FROM person JOIN peopleStatusOptions ON person.status = peopleStatusOptions.psId LEFT JOIN ( mScoreCard, mScoreEntry ) ON mScoreCard.replacedBy = -1 AND mScoreCard.mSCid = mScoreEntry.fk_mSCid AND mScoreEntry.fk_pid = person.pid LEFT JOIN mFaces ON person.pid = mFaces.fk_pid GROUP BY person.pid |
Deze view roep ik dan vervolgens aan als
SQL:
1
| SELECT * FROM person_info where personid = 851; |
Dit werkt, maar is vreselijk traag. Wanneer ik nu als query het volgende opgeef:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
| SELECT mFaces.filename AS picture, person.pid AS personid, person.firstname AS name_first, person.suffix AS name_suffix, person.lastname AS name_last, person.birthdate AS birthday, DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(person.birthdate)), '%Y')+0 AS age, person.phoneMob AS gsm, person.license AS license, peopleStatusOptions.name AS status, COUNT(DISTINCT(mScoreCard.mSCid)) AS work_count FROM person JOIN peopleStatusOptions ON person.status = peopleStatusOptions.psId LEFT JOIN ( mScoreCard, mScoreEntry ) ON mScoreCard.replacedBy = -1 AND mScoreCard.mSCid = mScoreEntry.fk_mSCid AND mScoreEntry.fk_pid = person.pid LEFT JOIN mFaces ON person.pid = mFaces.fk_pid WHERE person.pid = 851 GROUP BY person.pid |
krijg ik hetzelfde resultaat, alleen dan een heel stuk sneller. Nu wil ik, vanwege het grote aantal tabellen in de db, graag met views werken. Op deze manier heeft dat echter weinig zin.
MySQL versie is mysql-5.0.26
Ik ontken het bestaan van IE.