2

「first_name」という列に名が保存されていて、「last_name」という列に姓が保存されている場合、どのように人のフルネームを検索できますか

このテーブルには数百万のレコードがあるため、検索を効率的に行う方法が必要であることに注意してください。そして私はMySQLサーバーを使用しています

列 first_name と列 last_name は両方とも VARCHAR(80) 型です。

これまでのところ、次のことを試しましたが、 concat 関数のためにインデックスを無視するため、動作が遅くなります

SELECT first_name, phone FROM people
WHERE CONCAT_WS(' ',first_name, last_name) like '%John Smith%'

また、インデックス全文インデックス on( first_name, last_name) を追加してから、このクエリを追加しようとしました

SELECT *
FROM people
WHERE MATCH(first_name, last_name) AGAINST('John Smith')

ただし、これは最速のクエリではありません。この問題に対するより良いアプローチはありますか?

ありがとう

4

3 に答える 3

3

各フィールドを個別に検索してみてください。

WHERE first_name = 'James' and last_name = 'Hetfield';

また、カーディナリティが高くなる (一意の行が増える) ため、姓を最初に使用して、両方の複合インデックスを追加します。 '。

ALTER TABLE `some_table` ADD key (`last_name`, `first_name`);
于 2013-11-12T00:09:32.773 に答える
1

実際、パフォーマンスを検索したい場合は、アプローチを変更する必要があります (数百万以上のレコードには、より効率的なソリューションが必要です)。部分列に NoSQL または全文検索ソリューションを使用できますか。

于 2013-11-12T00:12:51.550 に答える