Mysqlあいまいマッチングクエリの最適化



Mysql Fuzzy Matching Query Optimization



MySQLは、likeステートメントよりも効率的です。位置を見つけるinstrfind_in_set
内部関数instrを使用します。これは、従来のlikeメソッドを置き換え、より高速です。

Instr関数、最初のパラメーターはフィールド、2番目のパラメーターは照会する文字列、文字列の位置が返されます。最初のパラメーターは1で、見つからない場合は0です。



例えば、

tpl_userから名前を選択します。ここで1とinstr(name、 ’jack’)



名前にジャックを使用して名前を照会できます。

LIKEステートメント
SELECT column FROM tableここでcondition `%keyword% 'のように

実際、代わりに2つの関数locate(position)とinstrを使用できます。



まず、LOCATEステートメント
SELECT column tableからここで、locate( ‘keyword’、condition)> 0

第二に、またはロケートのエイリアス
POSITIONステートメント
SELECT column tableからwhere position( ‘keyword’ IN condition

第三に、INSTRステートメント
SELECT column tableからここで、instr(condition、 ‘keyword’)> 0

Locate、position、instrの違いはパラメータの位置のみであり、位置は開始位置のパラメータと同じです。
mysql> SELECT LOCATE( ‘bar’、 ‘foobarbar’、5)

テスト結果の例は同じです。

SELECT b.id,a.cname,a.factory,a.description,a.detail,b.spec,b.sale_price from t_goods_spu a INNER JOIN t_goods_sku b on a.id = b.spu WHERE a.cname LIKE '% Ginkgo%' SELECT b.id,a.cname,a.factory,a.description,a.detail,b.spec,b.sale_price from t_goods_spu a INNER JOIN t_goods_sku b on a.id = b.spu WHERE position('Ginkgo' IN A.cname) SELECT b.id, a.cname, a.factory, a.description, a.detail, b.spec, b.sale_price from t_goods_spu a INNER JOIN t_goods_sku b on a.id = b.spu WHERE locate('Ginkgo', A.cname) SELECT b.id, a.cname, a.factory, a.description, a.detail, b.spec, b.sale_price from t_goods_spu a INNER JOIN t_goods_sku b on a.id = b.spu WHERE INSTR( a.cname, 'ginkgo')