After hearing both sides being suggested, I think I would recommend the 
more normalized approach of having one or more separate tables for the 
names (one name per row) and a mapping table that associates a name field 
(mother's maiden name, decedent's given name, decedent's surname, etc.) on 
a record (marriage, birth, death, etc.) to the possible names the 
transcriptionist thinks were written on the record. A simple index would 
very quickly find all full matches and partial beginning matches. With 
mid-word or word-ending matches**, the engine will still need to scan the 
entire list of names (not every name in the database, just the unique list 
of spellings which will be much smaller) .

This (the multi-table design) may add a little complexity to your GUI code 
but I think that the performance improvement on the searches will more 
than offset a little extra effort added to the front end and data entry 
portions of your process.

Shawn Green
Database Administrator
Unimin Corporation - Spruce Pine

** You could optimize word-ending searches by storing a copy of the name 
reversed. Then a regular index could also be used to quickly find the end 
of a name. 

Lets say you want to find all of the names that end in "esh"... You  have 
names like "Abesh", "Janesh", and "Phresh". If you added another column 
(indexed of course) to your names table that stored the names as "hsebA", 
"hsenaJ", and "hserhP" a search using LIKE 'hse%' would use that index 
where a search using LIKE '%esh' could not.

The trade off is that you nearly double the storage size of your names 
tables (one extra column plus its index) but you seriously improve search 
performance for an entire class of queries (names ending with ....).

"Jigal van Hemert" <[EMAIL PROTECTED]> wrote on 01/06/2005 09:30:08 AM:

> From: "Kentucky Families"
> 
> > A full-text search won't work. Too many records -- at least 8 million.
> From what I've read, full-text won't pick up the individual initials or 
very
> short names, like Vu, Lee, Doe, etc.
> 
> You can set the ft_min_word_len in an option file in the [mysqld] 
section to
> change the minimum word length (rebuild the full text indexes 
afterwards!)
> 
> Maybe alter the data a bit?
> If you store only firstnames you can search for J* to pick up an 
initial.
> If you only know initials simply use Jxzx as a first name (and let your
> application filter out the xzx part)
> If a name is shorter than four letters add xzx to the name and filter 
out in
> the application that shows the data.
> 
> Regards, Jigal.
> 
> 
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
> 

Reply via email to