Your message dated Mon, 19 Mar 2012 18:23:14 +0000
with message-id <[email protected]>
and subject line okay got it
has caused the Debian Bug report #591271,
regarding mysql-server-5.0: optimizer fails with 2-table join, but optimizes 
away all rows when using nested query
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
591271: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=591271
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: mysql-server-5.0
Version: 5.0.51a-24+lenny4
Severity: important


Tables are InnoDB engine, the schema I can submit in a followup to this
email.

There are two keys on sample:
a)  KEY `sample_timestamp` (`interface`,`timestamp`),
b)  KEY `sample_interface_id` (`interface`,`id`)

I think it chooses the wrong key for query 1, but forcing it to use the
other key doesn't help.

The tables _are_ being updated live (every 5 seconds), so the number of
rows in the EXPLAIN changes as well. Running ANALYZE does not help
(much).

mysql> explain SELECT MAX(sample.id) FROM sample JOIN interface ON
(sample.interface=interface.id) WHERE
interface.name='accounting-total'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: interface
         type: const
possible_keys: PRIMARY,name
          key: name
      key_len: 32
          ref: const
         rows: 1
        Extra: Using index
*************************** 2. row ***************************
           id: 1
  select_type: SIMPLE
        table: sample
         type: ref
possible_keys: sample_timestamp,sample_interface_id
          key: sample_timestamp
      key_len: 4
          ref: const
         rows: 654966
        Extra: Using index
2 rows in set (0.00 sec)

mysql> explain SELECT MAX(sample.id) FROM sample WHERE interface=(SELECT
interface.id FROM interface WHERE interface.name='accounting-total')\G
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: NULL
         type: NULL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: NULL
        Extra: Select tables optimized away
*************************** 2. row ***************************
           id: 2
  select_type: SUBQUERY
        table: interface
         type: const
possible_keys: name
          key: name
      key_len: 32
          ref:
         rows: 1
        Extra: Using index
2 rows in set (1.04 sec)

mysql> SELECT MAX(sample.id) FROM sample JOIN interface ON
(sample.interface=interface.id) WHERE interface.name='accounting-total';
+----------------+
| MAX(sample.id) |
+----------------+
|        6235488 |
+----------------+
1 row in set (0.60 sec)

mysql> SELECT MAX(sample.id) FROM sample WHERE interface=(SELECT
interface.id FROM interface WHERE interface.name='accounting-total');
+----------------+
| MAX(sample.id) |
+----------------+
|        6235488 |
+----------------+
1 row in set (0.00 sec)

Trying this query another way produces worse results than the first,
even if it should be equivalent. And it still chooses the wrong index.

mysql> explain SELECT MAX(sample.id) FROM sample WHERE interface IN
(SELECT interface.id FROM interface WHERE
interface.name='accounting-total')\G
*************************** 1. row ***************************
           id: 1
  select_type: PRIMARY
        table: sample
         type: index
possible_keys: NULL
          key: sample_timestamp
      key_len: 12
          ref: NULL
         rows: 6239592
        Extra: Using where; Using index
*************************** 2. row ***************************
           id: 2
  select_type: DEPENDENT SUBQUERY
        table: interface
         type: const
possible_keys: PRIMARY,name
          key: name
      key_len: 32
          ref: const
         rows: 1
        Extra: Using index
2 rows in set (0.00 sec)


-- System Information:
Debian Release: 5.0.4
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: i386 (i686)

Kernel: Linux 2.6.26-1-686 (SMP w/2 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages mysql-server-5.0 depends on:
ii  adduser                3.110             add and remove users and groups
ii  debconf [debconf-2.0]  1.5.24            Debian configuration management sy
ii  libc6                  2.7-18lenny2      GNU C Library: Shared libraries
ii  libdbi-perl            1.605-1           Perl5 database interface by Tim Bu
ii  libgcc1                1:4.3.2-1.1       GCC support library
ii  libmysqlclient15off    5.0.51a-24+lenny4 MySQL database client library
ii  libncurses5            5.7+20081213-1    shared libraries for terminal hand
ii  libreadline5           5.2-3.1           GNU readline and history libraries
ii  libstdc++6             4.3.2-1.1         The GNU Standard C++ Library v3
ii  libwrap0               7.6.q-16          Wietse Venema's TCP wrappers libra
ii  lsb-base               3.2-20            Linux Standard Base 3.2 init scrip
ii  mysql-client-5.0       5.0.51a-24+lenny4 MySQL database client binaries
ii  mysql-common           5.0.51a-24+lenny4 MySQL database common files
ii  passwd                 1:4.1.1-6+lenny1  change and administer password and
ii  perl                   5.10.0-19lenny2   Larry Wall's Practical Extraction 
ii  psmisc                 22.6-1            Utilities that use the proc filesy
ii  zlib1g                 1:1.2.3.3.dfsg-12 compression library - runtime

Versions of packages mysql-server-5.0 recommends:
ii  bsd-mailx [mailx]  8.1.2-0.20071201cvs-3 A simple mail user agent
ii  libhtml-template-p 2.9-1                 HTML::Template : A module for usin
ii  mailx              1:20071201-3          Transitional package for mailx ren

Versions of packages mysql-server-5.0 suggests:
pn  tinyca                        <none>     (no description available)

-- debconf information:
  mysql-server-5.0/really_downgrade: false
  mysql-server-5.0/need_sarge_compat: false
  mysql-server-5.0/start_on_boot: true
  mysql-server/error_setting_password:
  mysql-server-5.0/nis_warning:
  mysql-server-5.0/postrm_remove_databases: false
  mysql-server-5.0/need_sarge_compat_done: true
  mysql-server/password_mismatch:



--- End Message ---
--- Begin Message ---
Okay I have read through the bug report properly and now I am much
clearer - not least about the roles of the different contributors.
Essentially this bug report says the optimizer will always make mistakes
even if it continuously improves. The solution lies in standard Db
administration good practice. As such I am closing this.


--- End Message ---

Reply via email to