>Description:
SELECT fullTextMatches.realname, fullTextMatches.address,
fullTextMatches.address2, fullTextMatches.city,
fullTextMatches.state,
fullTextMatches.zip, fullTextMatches.country,
fullTextMatches.email,
fullTextMatches.homephone, fullTextMatches.workphone,
fullTextMatches.userid
FROM tums.fullTextMatches, orders.header USE INDEX (userId)
WHERE header.storeId="/stores/eyarn" AND
header.userId=fullTextMatches.userId
ORDER BY realname
generates different results and is much faster than the same query
without "USE INDEX(userId):
Here is the explain with the USE INDEX:
+-----------------+------+--------------------------------------+------------+---------+------------------------------+------+----------------+
| table | type | possible_keys | key
| key_len | ref | rows | Extra |
+-----------------+------+--------------------------------------+------------+---------+------------------------------+------+----------------+
| fullTextMatches | ALL | NULL | NULL
| NULL | NULL | 15 | Using filesort |
| header | ref | storeId,userid,storeId_2,storeStatus | userid
| 4 | fullTextMatches.userid | 3 | where used |
+-----------------+------+--------------------------------------+------------+---------+------------------------------+------+----------------+
and without:
+-----------------+-------+--------------------------------------+-------------+---------+------------------------------+--------+----------------+
| table | type | possible_keys | key
| key_len | ref | rows | Extra |
+-----------------+-------+--------------------------------------+-------------+---------+------------------------------+--------+----------------+
| fullTextMatches | ALL | NULL | NULL
| NULL | NULL | 15 | Using filesort |
| header | range | storeId,userid,storeId_2,storeStatus |
storeStatus | 64 | NULL | 116907 | where
used |
+-----------------+-------+--------------------------------------+-------------+---------+------------------------------+--------+----------------+
Without the USE INDEX zero records match. With the USE INDEX I get 13
matches.
>How-To-Repeat:
mysql> show fields from orders.header;
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
| Field | Type
| Null | Key | Default | Extra |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
| storeId | varchar(64)
| | MUL | | |
| shiptoOrganization | varchar(64)
| YES | | NULL | |
| shippingAddress | text
| YES | | NULL | |
| shippingCity | varchar(128)
| YES | | NULL | |
| shippingState | varchar(20)
| YES | | NULL | |
| shippingZipCode | varchar(10)
| YES | | NULL | |
| shippingCountry | varchar(30)
| YES | | NULL | |
| billtoOrganization | varchar(64)
| YES | | NULL | |
| billingAddress | text
| YES | | NULL | |
| billingCity | varchar(128)
| YES | | NULL | |
| billingState | varchar(20)
| YES | | NULL | |
| billingZipCode | varchar(10)
| YES | | NULL | |
| billingCountry | varchar(30)
| YES | | NULL | |
| businessName | varchar(128)
| YES | | NULL | |
| customerName | varchar(128)
| YES | | NULL | |
| shipType | varchar(128)
| YES | | NULL | |
| paymentType | varchar(128)
| YES | | NULL | |
| homePhone | varchar(20)
| YES | | NULL | |
| workPhone | varchar(20)
| YES | | NULL | |
| referringPage | text
| YES | | NULL | |
| customerEmail | varchar(128)
| YES | MUL | NULL | |
| transactionTime | datetime
| | MUL | 0000-00-00 00:00:00 | |
| storeEmail | varchar(128)
| YES | | NULL | |
| creditCardRefNum | varchar(128)
| YES | | NULL | |
| billpointMerchantName | varchar(128)
| YES | | NULL | |
| billpointMerchantId | varchar(128)
| YES | | NULL | |
| mailingList | varchar(10)
| YES | | NULL | |
| comments | text
| YES | | NULL | |
| cookie | varchar(128)
| YES | MUL | NULL | |
| transNum | int(11)
| | PRI | NULL | auto_increment |
| statusReason | text
| YES | | NULL | |
| shipping | decimal(6,2)
| YES | | 0.00 | |
| insurance | decimal(6,2)
| YES | | 0.00 | |
| taxes | decimal(6,2)
| YES | | 0.00 | |
| transactionType |
enum('tias','auction','store','otherFixedPrice','test','auctionChase')
| YES | | NULL | |
| ccvsReturnCount | int(2)
| YES | | 0 | |
| ccvsStatus | int(2)
| YES | | NULL | |
| ccvsStatusText | varchar(200)
| YES | | NULL | |
| orderStatus |
enum('inProcess','ordered','confirmed','paymentReceived','paymentCleared','shipped','productReceived','onHold','void','return','paymentOverdue','backOrdered','paymentAuthorized','paymentDeclined')
| YES | | NULL | |
| service | varchar(32)
| YES | | NULL | |
| shipper | varchar(32)
| YES | | NULL | |
| shipperTrackingNumber | varchar(64)
| YES | | NULL | |
| shipToName | varchar(128)
| YES | | NULL | |
| howIfoundTIAS | varchar(30)
| YES | | NULL | |
| serviceId | varchar(64)
| YES | MUL | NULL | |
| recurringPayment | int(1)
| YES | | NULL | |
| relatedTransNum | varchar(32)
| YES | | NULL | |
| authCode | varchar(32)
| YES | | NULL | |
| userId | int(10) unsigned
| | MUL | 0 | |
| shippingSuite | text
| YES | | NULL | |
| billingSuite | text
| YES | | NULL | |
| shipToPhone | varchar(20)
| YES | | NULL | |
| creditCardType | varchar(32)
| YES | | NULL | |
| otherComment | varchar(40)
| YES | | NULL | |
| saleType |
enum('webSite','phoneOrder','bulkOrder','overCounter')
| YES | | webSite | |
| resaleNo | varchar(16)
| YES | | NULL | |
| newsletter | tinyint(1)
| YES | | NULL | |
| dealerLogin | varchar(64)
| YES | | NULL | |
| paKey | int(8) unsigned
| YES | | NULL | |
| audited | tinyint(1)
| YES | | 0 | |
| requestedShipDate | date
| YES | | NULL | |
| amountReceived | decimal(8,2)
| YES | | NULL | |
| checkNumber | int(10) unsigned
| YES | | NULL | |
+-----------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------+-----+---------------------+----------------+
63 rows in set (0.00 sec)
mysql> show keys from orders.header;
+--------+------------+-----------------+--------------+-----------------+-----------+-------------+----------+--------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name
| Collation | Cardinality | Sub_part | Packed | Comment |
+--------+------------+-----------------+--------------+-----------------+-----------+-------------+----------+--------+---------+
| header | 0 | PRIMARY | 1 | transNum
| A | 590350 | NULL | NULL | |
| header | 1 | storeId | 1 | storeId
| A | 1565 | NULL | NULL | |
| header | 1 | storeId | 2 | transactionTime
| A | 590350 | NULL | NULL | |
| header | 1 | userid | 1 | userId
| A | 196783 | NULL | NULL | |
| header | 1 | cookie | 1 | cookie
| A | 295175 | NULL | NULL | |
| header | 1 | transactionTime | 1 | transactionTime
| A | 590350 | NULL | NULL | |
| header | 1 | customerEmail | 1 | customerEmail
| A | 196783 | NULL | NULL | |
| header | 1 | storeId_2 | 1 | storeId
| A | 1565 | NULL | NULL | |
| header | 1 | storeId_2 | 2 | relatedTransNum
| A | 118070 | NULL | NULL | |
| header | 1 | serviceId | 1 | serviceId
| A | 73793 | NULL | NULL | |
| header | 1 | storeStatus | 1 | storeId
| A | 1565 | NULL | NULL | |
| header | 1 | storeStatus | 2 | orderStatus
| A | 5903 | NULL | NULL | |
+--------+------------+-----------------+--------------+-----------------+-----------+-------------+----------+--------+---------+
mysql> show fields from tums.fullTextMatches;
+--------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------------------+------+-----+---------+-------+
| userid | int(10) unsigned | | | 0 | |
| name | varchar(64) | | | | |
| passwd | varchar(64) | YES | | NULL | |
| email | varchar(64) | | | | |
| active | enum('Y','N') | YES | | Y | |
| homedir | varchar(64) | YES | | NULL | |
| pwtype | int(10) unsigned | | | 0 | |
| realname | varchar(64) | YES | | NULL | |
| address | varchar(128) | YES | | NULL | |
| city | varchar(64) | YES | | NULL | |
| state | varchar(32) | YES | | NULL | |
| zip | varchar(16) | YES | | NULL | |
| country | varchar(16) | YES | | NULL | |
| homePhone | varchar(20) | YES | | NULL | |
| workPhone | varchar(20) | YES | | NULL | |
| pastOrders | tinyint(1) | YES | | 0 | |
| uid | smallint(2) unsigned | YES | | NULL | |
| gid | smallint(2) unsigned | YES | | NULL | |
| shell | varchar(64) | YES | | NULL | |
| address2 | text | YES | | NULL | |
| organization | varchar(128) | YES | | NULL | |
+--------------+----------------------+------+-----+---------+-------+
21 rows in set (0.00 sec)
Why is this? I don't like using USE INDEX, because for some data values
it may be non optimal.
Note that REPAIR TABLE on orders.header doesn't fix the problem.
>Fix:
>Submitter-Id: randy6839
>Originator: Mike Wexler
>Organization:
TIAS.COM
>MySQL support: extended login
>Synopsis: non optimal selects with wrong results
>Severity: serious
>Priority: medium
>Category: mysql
>Class: sw-bug
>Release: mysql-3.23.44 (Source distribution)
>Environment:
System: Linux adams.tias.com 2.4.2-2jsh #1 SMP Fri May 11 16:51:18 PDT 2001 i686
unknown
Architecture: i686
Some paths: /usr/bin/perl /usr/bin/make /usr/bin/gmake /usr/local/bin/gcc /usr/bin/cc
GCC: Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs
Configured with: ../gcc-3.0/configure
Thread model: single
gcc version 3.0
Compilation info: CC='gcc' CFLAGS='-O2 -march=i386 -mcpu=i686' CXX='c++'
CXXFLAGS='-O2 -march=i386 -mcpu=i686' LDFLAGS=''
LIBC:
lrwxrwxrwx 1 root root 13 Dec 17 14:09 /lib/libc.so.6 -> libc-2.2.4.so
-rwxr-xr-x 1 root root 1283964 Dec 8 06:14 /lib/libc-2.2.4.so
-rw-r--r-- 1 root root 27314296 Dec 8 06:02 /usr/lib/libc.a
-rw-r--r-- 1 root root 178 Dec 8 06:02 /usr/lib/libc.so
Configure command: ./configure i386-redhat-linux --prefix=/usr --exec-prefix=/usr
--bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share
--includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec
--localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man
--infodir=/usr/share/info --without-debug --without-readline --enable-shared
--with-extra-charsets=complex --with-bench --localstatedir=/var/lib/mysql
--with-unix-socket-path=/var/lib/mysql/mysql.sock --with-mysqld-user=mysql
--with-extra-charsets=all --with-berkeley-db
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php