Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 09-23-2006, 03:09 AM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Trouble using LEFTJOIN when table 2 contains 60,000+ records!

I am having BIG problems with pageload times when executing the following query:
PHP Code:
$queryvenues $db->query_read("
    SELECT " 
TABLE_PREFIX "erc_venue.*, " TABLE_PREFIX "dma.* 
    FROM " 
TABLE_PREFIX "erc_venue
    LEFT JOIN " 
TABLE_PREFIX "dma ON " TABLE_PREFIX "dma.zipcode = " TABLE_PREFIX "erc_venue.venuezipcode
    ORDER BY " 
TABLE_PREFIX "erc_venue.venuetitle
"
); 
Just to give you all an idea of my db, the erc_venue table contains more than 1,000 records and the dma table contains more than 60,000 records...

FYI, the function i have created to display the results is as follows:
PHP Code:
function print_venue_row($venue
{
        if (
$venue['venuecountry'] = 'USA' AND $venue['venuezipcode'] != 0)
        { 
            
$venuedma $venue['dmaname_clean'] . " (" $venue['rank'] . ")";
        } 
        else 
        { 
            
$venuedma ''
        } 

    
print_cells_row(array(
        
"<a href=\"erc_editvenue.php?venueid=".$venue['venueid']."\">".$venue['venuetitle']."</a>",
        
$venue['venuecitystate'],
                
$venuedma,
        
$venue['venueid'],
        
"<a href=\"".$venue['venueurl']."\" target=\"_blank\"><img src=\"../images/buttons/ip.gif\" alt=\"".$venue['venueurl']."\" border=\"0\" /></a>",
        
"<input type=\"radio\" name=\"idforaction\" value=\"".$venue['venueid']."\">"
    
));

When executing this query, it can take as long as 122 seconds to load the page! Is there any way I could re-write the query (or the function print_venue_row) more efficiently to help load the page more quickly?

Thanks in advance for your assistance
Reply With Quote
  #2  
Old 09-23-2006, 03:31 AM
Paul M's Avatar
Paul M Paul M is offline
 
Join Date: Sep 2004
Location: Nottingham, UK
Posts: 23,748
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

What indexes do you have on the tables ?

Can you run in debug mode, and then the explain view, and post the result.
Reply With Quote
  #3  
Old 09-23-2006, 06:11 AM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks, for dma table, my source is as follows:
Code:
  `dmacode` int(10) unsigned NOT NULL auto_increment,
  `zipcode` int(5) unsigned zerofill NOT NULL default '00000',
  `rank` tinyint(2) unsigned zerofill NOT NULL default '00',
  `dmaname_clean` varchar(250) NOT NULL default '',
  PRIMARY KEY  (`dmacode`)
for erc_venue table my source is:
Code:
  `venueid` int(6) unsigned NOT NULL auto_increment,
  `venuetitle` varchar(30) NOT NULL default '',
  `venueaddy` varchar(50) default NULL,
  `venuecitystate` varchar(50) default NULL,
  `venuezipcode` int(5) unsigned zerofill NOT NULL default '00000',
  `venuecountry` varchar(20) default 'USA',
  `venueurl` varchar(80) default NULL,
  `venuephone` varchar(12) default NULL,
  PRIMARY KEY  (`venueid`)
and the explain thingie is as follows:
Code:
SELECT erc_venue.*, dma.* 
FROM erc_venue
LEFT JOIN dma ON dma.zipcode = erc_venue.venuezipcode

ORDER BY erc_venue.venuetitle
LIMIT 0, 12
id select_type table type possible_keys key key_len ref rows Extra 
1 SIMPLE erc_venue ALL         98 Using temporary; Using filesort 
1 SIMPLE dma ALL         45534   

Time Before: 0.27991 seconds
Time After: 7.76009 seconds
Time Taken: 7.48018 seconds
Thanks!
Attached Images
File Type: gif Untitled-1.gif (21.3 KB, 0 views)
Reply With Quote
  #4  
Old 11-14-2006, 06:41 PM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

bump
Reply With Quote
  #5  
Old 11-14-2006, 06:48 PM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Add an index on your zipcode columns (both tables) - this will help a lot.

Also, if you alias your tables - you will no longer have to specify the table prefix all over the place:
PHP Code:
$queryvenues $db->query_read("
    SELECT erc_venue.*, dma.*
    FROM " 
TABLE_PREFIX "erc_venue as erc_venue
    LEFT JOIN " 
TABLE_PREFIX "dma as dma on (dma.zipcode = erc_venue.venuezipcode)
    ORDER BY erc_venue.venuetitle
"
); 
Reply With Quote
  #6  
Old 11-14-2006, 07:39 PM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks SirAdrian,
that was exactly the problem. I had indexed `dmacode` but needed to also create an index on `zipcode`.

The query SCREAMS now. thanks again


(going to work on using aliases from now on as well)
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 03:56 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.07438 seconds
  • Memory Usage 2,249KB
  • Queries Executed 12 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (3)bbcode_code
  • (3)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (6)post_thanks_box
  • (6)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (6)post_thanks_postbit_info
  • (6)postbit
  • (1)postbit_attachment
  • (6)postbit_onlinestatus
  • (6)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • postbit_attachment
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete