mysql - Huge performance difference in almost identical queries -


i have 2 queries count number of rows in relatively large table. allow filtering particular name, i've left-joined smaller table it.

my first attempt yielded query #1 (see below), turned out very, slow (6-7 seconds). after playing around query bit, got query #2 (see below) seems same thing faster (< 0.05 seconds).

query #1 ( > 6 seconds):

select count(*) bigtable left join (     select distinct localkey, name     smalltable ) smalltable on bigtable.foreignkey = smalltable.localkey; 

query #2 ( < 0.05 seconds):

select count(*) bigtable left join (     select distinct localkey, name     smalltable ) smalltable on bigtable.foreignkey = smalltable.localkey smalltable.localkey "%"; 

both queries return exact same number (50300). bigtable has 50300 rows, smalltable has 680 rows. remove many factors possible, i've ensured records in bigtable have (unique) matching row in smalltable. smalltable.localkey indexed, primary key bigtable. both tables have been optimised using optimize table [table];. rows smalltable matched smalltable.localkey "%".

i've tried searching phenomenon exhaustively, however, i've found no explanations whatsoever. have explanation why first query slower, and, if possible, better solution query #2?

edit:

explain extended query #1

explain extended query #2

immediately after running each query, show $warnings show optimized query execution order. posting show $warnings query #1 , query #2 should understand why query #2 quicker.


Comments

Popular posts from this blog

python Tkinter Capturing keyboard events save as one single string -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

javascript - Z-index in d3.js -