[development] Views & lots-o-data

Larry Garfield larry at garfieldtech.com
Sun Oct 7 20:37:44 UTC 2007


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