Re: slow search on INDEX?

2002-03-25 Thread Gerald Clark

None of these selects will use an index.
1.  An index can not be used for LIKE '$something'.
2.  An index will not be used if  1/3 of the entries match.
3.  See #1.

Jaime Teng wrote:

Hi,

I have this table:
mysql describe eventlog;
+-+--+--+-+-++
| Field   | Type | Null | Key | Default | Extra  |
+-+--+--+-+-++
| id  | int(10) unsigned |  | PRI | NULL| auto_increment |
| timestamp   | int(10) unsigned |  | MUL | 0   ||
| type| tinyint(4)   |  | MUL | 0   ||
| source  | char(10) |  | MUL | ||
| description | char(100)|  | | ||
+-+--+--+-+-++
Currently, this table has 300,000+ entries and 39MB in filesize.

I made some observations based on the following search:

1. SELECT * FROM eventlog WHERE 
   description LIKE %DENIED% ORDER BY id DESC LIMIT 20;
2. SELECT * FROM eventlog 
   WHERE source = 'ERROR' ORDER BY id DESC LIMIT 20;
3. SELECT * FROM eventlog WHERE 
   SOURCE = 'ERROR' and description LIKE %DENIED% 
   ORDER BY id DESC LIMIT 20;

Of the 3 queries, #1 gives me the fastest result (5 secs), and 
#2 comes very far second (10 secs), and #3 comes ALMOST equal 
in time with #2.

I'd like to point out that the pattern '%DENIED%' is only present
when source = 'ERROR'. AND source='ERROR' is about 1/3 of the table's
entry. Furthermore, the pattern '%DENIED%' occurs 1/5 of the time.

Considering the fact that I do not have any INDEX on description,
the search *description LIKE %DENIED* should be very slow as this
will try to apply the search on ALL entries. Likewise, since I have
an INDEX on source, the search source='ERROR' should be fairly fast
at least faster than the first one. YET, I dont get any improvement 
and it turned out even a lot slower.

Why was it this way?

thanks for your inputs.

jaime


-
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





-
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




slow search on INDEX?

2002-03-24 Thread Jaime Teng

Hi,

I have this table:
mysql describe eventlog;
+-+--+--+-+-++
| Field   | Type | Null | Key | Default | Extra  |
+-+--+--+-+-++
| id  | int(10) unsigned |  | PRI | NULL| auto_increment |
| timestamp   | int(10) unsigned |  | MUL | 0   ||
| type| tinyint(4)   |  | MUL | 0   ||
| source  | char(10) |  | MUL | ||
| description | char(100)|  | | ||
+-+--+--+-+-++
Currently, this table has 300,000+ entries and 39MB in filesize.

I made some observations based on the following search:

1. SELECT * FROM eventlog WHERE 
   description LIKE %DENIED% ORDER BY id DESC LIMIT 20;
2. SELECT * FROM eventlog 
   WHERE source = 'ERROR' ORDER BY id DESC LIMIT 20;
3. SELECT * FROM eventlog WHERE 
   SOURCE = 'ERROR' and description LIKE %DENIED% 
   ORDER BY id DESC LIMIT 20;

Of the 3 queries, #1 gives me the fastest result (5 secs), and 
#2 comes very far second (10 secs), and #3 comes ALMOST equal 
in time with #2.

I'd like to point out that the pattern '%DENIED%' is only present
when source = 'ERROR'. AND source='ERROR' is about 1/3 of the table's
entry. Furthermore, the pattern '%DENIED%' occurs 1/5 of the time.

Considering the fact that I do not have any INDEX on description,
the search *description LIKE %DENIED* should be very slow as this
will try to apply the search on ALL entries. Likewise, since I have
an INDEX on source, the search source='ERROR' should be fairly fast
at least faster than the first one. YET, I dont get any improvement 
and it turned out even a lot slower.

Why was it this way?

thanks for your inputs.

jaime


-
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