SQL Antipatterns ch17 Poor Man's Search Engine
- Poor Man's Search Engine
- Objective: Full-Text Search
- Antipattern: Pattern Matching Predicates
- How to Recognize the Antipattern
- Legitimate Uses of the Antipattern
- Solution: Use the Right Tool for the Job
- 英語
Poor Man's Search Engine
You don't have to use SQL to solve every problem.
- SQLで速くて正確な検索機能を実現することは、見かけによらず難しい
Objective: Full-Text Search
- SQLの原則として、カラムはatomicである
- 値と値の比較はできるが、値まるごとの比較である
- 部分文字列の比較は効率や正確さを欠く運命にある
Antipattern: Pattern Matching Predicates
SELECT * FROM Bugs WHERE description REGEXP '[[:<:]]one[[:>:]]';
How to Recognize the Antipattern
- こういうのが聞こえてきたら注意:
Legitimate Uses of the Antipattern
- 滅多に発行しないクエリなら良い
- インデックスによる利点が少ない
- 単純な要件なら良い
Solution: Use the Right Tool for the Job
Vendor Extensions
- 特定のDB製品依存で良いならば、高パフォーマンスを得るうえで最善の選択
Full-Text Index in MySQL
- MyISAMストレージエンジン専用でFULLTEXT INDEXをサポート
- 対象のデータ型
- CHAR
- VARCHAR
- TEXT
- MATCH関数で検索
- 対象のデータ型
Text Indexing in Oracle
Full-Text Search in Microsoft SQL Server
- ストアドプロシージャでfull-textインデックス作成
- CONTAINS演算子で検索
Text Search in PostgreSQL
- TSVECTORデータ型
- 検索用データ構造
- さらに転値インデックス(GIN index: generalized inverted index)を作成する
Full-Text Search (FTS) in SQLite
Third-Party Search Engines
Roll Your Own
英語
- deceptively difficult
- 見かけによらず難しい
- gulf
- 隔たり