[Vtigercrm-developers] calendar optimization

Adam Heinz amh at metricwise.net
Wed Aug 14 15:35:33 UTC 2013


The fundamental issue that I'm trying to solve is that the LEFT JOIN [4]
against vtiger_recurringevents requires the WHERE OR condition -- now you
have to check both vtiger_activity.date_start [5]
OR vtiger_recurringevents.recurringdate [6].  My best idea right now is to
essentially make ALL events recurring with with recurringtype = Daily,
repeating once.  This gets you pretty close to being able to use an index
on vtiger_recurringevents to do the bulk of the filtering.  Unfortunately,
this bumps up against a second issue.

It is currently possible to have a recurring event, say 2-4pm repeating
every Monday.  It is also possible to have a multi-day event, say 2pm
Monday to 4pm Tuesday.  It does not appear to be possible to have a
recurring multi-day event.  Though vtiger_recurringevents has a field to
hold the start date of the recurrence, it does not have a second date field
to hold the end date of the recurrence.

The end goal here is to have a single table that holds the start and end
dates necessary to determine if a given event (or recurring instance of
that event, or part of the multi-day event) should be displayed on a
calendar.

I did briefly attempt using UNION to split the query into recurring and
non-recurring halves, but there is a surprising amount of code that
modifies the SQL after the fact, so I abandoned that effort temporarily.  I
haven't ruled it out yet.

[4]
http://trac.vtiger.com/cgi-bin/trac.cgi/browser/vtigercrm/branches/6.0.0/modules/Calendar/Appointment.php#L93

[5] mysql> desc vtiger_activity;
+------------------+--------------+------+-----+------------+-------+
| Field            | Type         | Null | Key | Default    | Extra |
+------------------+--------------+------+-----+------------+-------+
| activityid       | int(19)      | NO   | PRI | 0          |       |
| subject          | varchar(100) | NO   |     |            |       |
| semodule         | varchar(20)  | YES  |     | NULL       |       |
| activitytype     | varchar(200) | YES  | MUL | NULL       |       |
| date_start       | date         | NO   | MUL | 0000-00-00 |       |
| due_date         | date         | YES  | MUL | NULL       |       |
| time_start       | varchar(50)  | YES  |     | NULL       |       |
| time_end         | varchar(50)  | YES  |     | NULL       |       |
| sendnotification | char(3)      | NO   |     | 0          |       |
| duration_hours   | varchar(200) | YES  |     | NULL       |       |
| duration_minutes | varchar(200) | YES  |     | NULL       |       |
| status           | varchar(200) | YES  | MUL | NULL       |       |
| eventstatus      | varchar(200) | YES  | MUL | NULL       |       |
| priority         | varchar(200) | YES  |     | NULL       |       |
| location         | varchar(150) | YES  |     | NULL       |       |
| notime           | char(3)      | NO   |     | 0          |       |
| visibility       | varchar(50)  | NO   |     | all        |       |
| recurringtype    | varchar(200) | YES  |     | NULL       |       |
+------------------+--------------+------+-----+------------+-------+

[6] mysql> desc vtiger_recurringevents;
+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| recurringid   | int(19)     | NO   | PRI | NULL    | auto_increment |
| activityid    | int(19)     | NO   | MUL | 0       |                |
| recurringdate | date        | YES  | MUL | NULL    |                |
| recurringtype | varchar(30) | YES  |     | NULL    |                |
| recurringfreq | int(19)     | YES  |     | NULL    |                |
| recurringinfo | varchar(50) | YES  |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+




On Wed, Aug 14, 2013 at 10:35 AM, Prasad <prasad at vtiger.com> wrote:

> Adam,
>
> Interesting - can you share the details of changes that is required for
> based on Vtiger 6 Beta.
>
> Regards,
> Prasad
>
> *Connect with us on: *Twitter <http://twitter.com/vtigercrm> *I* Facebook<http://www.facebook.com/pages/vtiger/226866697333578?sk=wall>
>  *I* Blog <https://blogs.vtiger.com/>* I* Wiki<http://wiki.vtiger.com/index.php/Main_Page>
>  *I *Forums  <https://discussions.vtiger.com>*I* Website<https://www.vtiger.com/>
>
>
> On Wed, Aug 14, 2013 at 1:44 AM, Adam Heinz <amh at metricwise.net> wrote:
>
>> We do a ton of scheduling here, so our calendars get hammered all the
>> time.  Some of our larger stores are starting to see performance problems
>> due to various calendar queries running full index scans.  The most
>> prevalent examples are readAppointment [1][2] and getEventList [3].  Due to
>> all the OR conjunctions in the WHERE clauses, MySQL is unable to determine
>> a useful index, even after I've removed all of the CAST/CONCAT calls.  Is
>> anyone else having performance problems with their calendar?  I have some
>> fairly drastic ideas on how to solve the problem.  ;)
>>
>> [1]
>> http://trac.vtiger.com/cgi-bin/trac.cgi/browser/vtigercrm/branches/5.4.0/modules/Calendar/Appointment.php#L61
>> [2]
>> http://trac.vtiger.com/cgi-bin/trac.cgi/browser/vtigercrm/branches/6.0.0/modules/Calendar/Appointment.php#L61
>> [3]
>> http://trac.vtiger.com/cgi-bin/trac.cgi/browser/vtigercrm/branches/5.4.0/modules/Calendar/calendarLayout.php#L1357
>>
>>
>> _______________________________________________
>> http://www.vtiger.com/
>>
>
>
> _______________________________________________
> http://www.vtiger.com/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.vtigercrm.com/pipermail/vtigercrm-developers/attachments/20130814/da5eebfc/attachment.html>


More information about the vtigercrm-developers mailing list