Hi!

On Nov 26, Mike Wexler wrote:
> I'd like to understand this better.
> 
> Lets say I have a table with 4 fields
> 
> itemKey INT(10) unsigned auto_increment primary key
> status enum("forsale", "sold")
> description TEXT
> price DECIMAL(10,2)
> 
> And I do a
> 
> SELECT * FROM table
> WHERE MATCH (description) AGAINST ("A really nice toy")
> AND status="forsale"
> ORDER BY MATCH (description) AGAINST ("A really nice toy")
> LIMIT 10
> 
> And lets further state that there at 10,000,000 records in the table and 
> 7,500,000 of them are for sale. Lets also say that the minimum word 
> length is set to 3 (so toy is considered significant for the fulltext 
> search) and there is a fulltext index on description.
> 
> Lets also assume that there are 1,000,000 records with the word "really" 
> , 1,000,000 records with the word "nice" and 500,000 records with the 
> word "toy". Lets say there are only 500 records with all three words.
> 
> Approximately how many records will this query need to look at to return 
> a result? Approximately how long will it take?

First - fulltext engine does NOT looks at records at all for text search,
it builds a list of documents purely from the index. Of course, MySQL
can later retrieve actual rows, based on this list.

So, I'll answer the question "...how many index entries will this query..."

The query, as you wrote it, will look at all the 2,500,000 index entries.

> How would the following query compare:
> 
> SELECT * FROM table
> WHERE MATCH (description) AGAINST ("+A +really +nice +toy")
> AND status="forsale"
> ORDER BY MATCH (description) AGAINST ("+A +really +nice +toy")
> LIMIT 10

In 4.0.1 this query will be absolutely identical to the first one.
As boolean fulltext search was not documented we took a liberty of
changing the syntax slightly. Now it IS documented.

The query

  SELECT * FROM table
  WHERE MATCH (description) AGAINST ("+A +really +nice +toy" IN BOOLEAN MODE)
  ORDER BY MATCH (description) AGAINST ("+A +really +nice +toy" IN BOOLEAN MODE)
  LIMIT 10

will abort the search when it retrieves the 500th document with all the
three words. It's impossible to say, how many index entries it will look
at.

The query

  SELECT * FROM table
  WHERE MATCH (description) AGAINST ("+A +really +nice +toy" IN BOOLEAN MODE)
  LIMIT 10

will abort the search when it retrieves the 10th document with all the
three words. It's impossible to say, how many index entries it will look
at.

Regards,
Sergei

-- 
MySQL Development Team
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /   Sergei Golubchik <[EMAIL PROTECTED]>
 / /|_/ / // /\ \/ /_/ / /__  MySQL AB, http://www.mysql.com/
/_/  /_/\_, /___/\___\_\___/  Osnabrueck, Germany
       <___/

---------------------------------------------------------------------
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

Reply via email to