Re: SQL Performance Help

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Tony Grimes wrote:
I'm developing a course calendar for a client and I'm running into
performance problems with the admin site. For example, when I try to include
registration counts in the course list, the page really slows down for large
course lists (50 or so):

COURSE        ATTENDEES      CAPACITY    SEATS LEFT
======        =========      ========    ==========
Course 1         5              10           5
Course 2         6              15           9
Course 3         4              10           6

I've been using one query to retrieve the course list and then one for each
attendee count. Is there a more efficient way of doing this all in one
query? I was thinking something like this (I'm not a SQL expert, so I don't
know if this is even possible):

SELECT
    course_name,
    capacity,
    count(query here) as attendee_count
FROM events AS e
LEFT OUTER JOIN event_attendees AS a ON e.event_id = a.event_id
WHERE start_time BETWEEN point_a AND point_b

Or should I just pull everything as a separate row like this and sort it all
out programmatically:

SELECT
    e.course_name,
    e.capacity,
    a.user_id
FROM events AS e
LEFT OUTER JOIN event_attendees AS a ON e.event_id = a.event_id
WHERE start_time BETWEEN point_a AND point_b

Or should I just try caching the data in PHP? Would an index help?

Index your tables, make the database do the work. Much easier and less prone to bugs :)

Check you have an index on:

events(event_id)
event_attendees(event_id)

table(start_time) (whichever that table applies to - I assume it's events).

Maybe try a multi-column index if this query gets run a lot:

create index event_eventid_start_time on events(event_id, start_time);

Use 'explain' to see which one is being used and possibly get rid of the other one.


I have a guide about how to index databases here:

http://www.designmagick.com/article/16/

(Yes it's a postgresql site but the same rules apply to mysql and other databases as well).

--
Postgresql & php tutorials
http://www.designmagick.com/

--
PHP Database Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Postgresql Discussion]     [Kernel Newbies]     [Postgresql]     [Yosemite News]

  Powered by Linux