[development] Views & lots-o-data

Ryan Courtnage ☠ ryan at courtnage.ca
Mon Oct 8 04:57:08 UTC 2007


Just a follow-up.  I turned on mysql query logging to see which query
was holding me up.  Turned out to be a COUNT, which I assume is needed
to build the paging properly:

---snip---
SELECT count( DISTINCT(node.nid)) FROM node node  LEFT JOIN
node_charity node_charity ON node.nid = node_charity.nid WHERE
(node.type IN ('node_charity'))
---snip---

Creating an index on my table's "nid" column made all the difference
in the world.

Thanks again,
Ryan

On 10/7/07, Ryan Courtnage ☠ <ryan at courtnage.ca> wrote:
> Thanks a lot guys.  I'll examine the query and try an index.
>
> Cheers
>
> On 10/7/07, Larry Garfield <larry at garfieldtech.com> wrote:
> > I find that I almost never use full node or teaser views, as they do a full
> > node load on each view.  That's extremely expensive.  Instead, almost ever
> > view I have is a List View, which is a single query.  It's much faster in
> > most cases.
> >
> > The next thing to do is take the query Views generates and run an EXPLAIN on
> > it.  Dollars to donuts you can get a huge performance boost by adding one or
> > two carefully placed indexes in your database.
> >
> > Cheers.
> >
> > On Sunday 07 October 2007, Ryan Courtnage ☠ wrote:
> > > Hi all,
> > >
> > > I've just written a node module that implements a view.
> > >
> > > First, I got my simple view to display the node title & body - this works.
> > >
> > > Next, I add a field that I've exposed from my custom module's table (a
> > > "city" field).  This is where I run into a problem.  My module's
> > > node-type has over 88,000 entries.  The query that the Views module
> > > runs will cause mysql to pin the CPU (I've watched it pin for over 100
> > > minutes before killing the process).
> > >
> > > What can I do to improve the perfomance (in a big big way)?  I'm not a
> > > DBA, is there something I should be doing at the DB table level to
> > > improve performance?  Or perhaps there's a Views option I'm missing?
> > >
> > > My views implementation follows.  I've commented above the
> > > $view->field array that causes the problem.
> > >
> > > Thank you!
> > > Ryan
> > > irc: Bentley
> > >
> > > ----
> > >
> > > function node_charity_views_tables() {
> > >   $table = array(
> > >     'name' => 'node_charity',
> > >     'join' => array(
> > >       'left' => array(
> > >         'table' => 'node',
> > >         'field' => 'nid'
> > >       ),
> > >       'right' => array(
> > >         'field' => 'nid'
> > >       ),
> > >     ),
> > >     'fields' => array(
> > >       'address_city' => array(
> > >         'name' => t('Charity: City'),
> > >         'help' => t('City of Charity'),
> > >         'sortable' => FALSE
> > >       ),
> > >     )
> > >   );
> > >   $tables["node_charity"] = $table;
> > >   return $tables;
> > > }
> > >
> > > function node_charity_views_arguments() {
> > >
> > > }
> > >
> > > function node_charity_views_default_views() {
> > >   $view = new stdClass();
> > >   $view->name = 'Charities1';
> > >   $view->description = 'CCOs';
> > >   $view->access = array (
> > > );
> > >   $view->view_args_php = '';
> > >   $view->page = TRUE;
> > >   $view->page_title = 'Charities';
> > >   $view->page_header = '';
> > >   $view->page_header_format = '1';
> > >   $view->page_footer = '';
> > >   $view->page_footer_format = '1';
> > >   $view->page_empty = '';
> > >   $view->page_empty_format = '1';
> > >   $view->page_type = 'list';
> > >   $view->url = 'charities1';
> > >   $view->use_pager = TRUE;
> > >   $view->nodes_per_page = '50';
> > >   $view->sort = array (
> > >   );
> > >   $view->argument = array (
> > >   );
> > >   $view->field = array (
> > >     array (
> > >       'tablename' => 'node',
> > >       'field' => 'title',
> > >       'label' => '',
> > >       'handler' => 'views_handler_field_nodelink',
> > >       'options' => 'link',
> > >     ),
> > >     array (
> > >       'tablename' => 'node',
> > >       'field' => 'body',
> > >       'label' => '',
> > >       'handler' => 'views_handler_field_body',
> > >     ),
> > >     // the following array causes cpu to pin for hours.
> > >     array (
> > >       'tablename' => 'node_charity',
> > >       'field' => 'address_city',
> > >       'label' => '',
> > >     ),
> > >   );
> > >   $view->filter = array (
> > >     array (
> > >       'tablename' => 'node',
> > >       'field' => 'type',
> > >       'operator' => 'OR',
> > >       'options' => '',
> > >       'value' => array (
> > >         0 => 'node_charity',
> > >       ),
> > >     ),
> > >   );
> > >   $view->exposed_filter = array (
> > >   );
> > >   $view->requires = array(node, node_charity);
> > >   $views[$view->name] = $view;
> > >
> > >   return $views;
> > > }
> >
> >
> > --
> > Larry Garfield                  AIM: LOLG42
> > larry at garfieldtech.com          ICQ: 6817012
> >
> > "If nature has made any one thing less susceptible than all others of
> > exclusive property, it is the action of the thinking power called an idea,
> > which an individual may exclusively possess as long as he keeps it to
> > himself; but the moment it is divulged, it forces itself into the possession
> > of every one, and the receiver cannot dispossess himself of it."  -- Thomas
> > Jefferson
> >
>


More information about the development mailing list