使用场景 在MYSQL中当对一个文本类型的字段进行LIKE 并以%开头的查询时,会进行全表扫描。 比如 我们商品中有商品500万件。如果我们要搜索商品名称中带红色的,如果不且SPHINX肯定是这样写: 原因一、全表扫描慢: SELECT * FROM php34_goods WHERE goods_name LIKE ‘%红色%’; 这条SQL会进行全表扫描,所以性能非常慢,查询速度非常慢。 原因二、MYSQL没有中文分词,而一般对短语搜索时必须分词才能搜索
sphinx就可以解决以上两个问题: 总结:当一个功能需要对表中text,varchar等文本类型的字段进行LIKE 查询时,如(根据歌词搜索歌曲这个功能)MYSQL是全表扫描非常慢,需要使用SPHINX:
SPHINX优化:1.解决性能问题 2.解决中文分词的问题
sphinx有两种使用方式: 用法一原始用法:SPHINX和mysql是两个独立的服务器 流程:
- PHP要先把要搜索的短语发给SPHINX服务器,SPHINX返回的是记录的ID
- PHP 再使用sphinx返回的ID查询数据库 用法一、:shpinxse:把SPHINX集成到MYSQL里去(没有单独的shpinx服务器) PHP只需要写一个SQL语句即可,不用很管SPHINX,MYSQL会自己连接查询sphinx。如果要使用这种 需要在LINUX下重新编译MYSQL,把SPHINX当成插件编译到MYSQL中去。
实际操作:
- 先下载sphinx的包,我们下载的是coreseek。 corecoek中一个加了中文功能的sphinx。
- 下载包之后几个重要文件说明: etc/csft_mysql.conf 配置文件 bin/indexer.exe 创建全文索引 bin/searchd.exe 启动服务器,需创建索引 api/sphinx.php php 操作类
实际应用:先复制MYSQL的配置文件模板到根目录下并改名为sphinx.conf 配置文件配置好之后就可以使用这个文件生成索引了: 安装sphinx服务器 打开服务窗口启用sphinx:
- 写PHP代码操作SPHINX A. 先复制coreseek包中的sphinxapi.php文件到项目中: