Sphinx-关于Sphinx与mysql索引性能对比,为什么sphinx索引性能要比直接用mysql索引低不少呢
需求描述:
一张数据量过千万的表,id为主key,username建立了mysql的索引。
我使用sphinx对该表也建立了全文索引,索引字段为username,属性字段为nickname与phone。
测试SELECT SQL_NO_CACHE * FROM table WHERE username = 'xxxx';
与用sphinx进行$sc->Query('xxxxx', '*');
测试结果sphinx要比mysql查询慢不少,请教这是为什么。
还有我使用随机username查询sphinx发现有较大的几率非常慢,每次查询大概需要4s,怀疑是内存过小,但是网上很多测试也都是基于老机器。我这里是单核2g内存,mysql与sphinx部署在一起的环境。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Sphinx是用来补充mysql在全文检索方面的不足的,它的主要功能是作为一个全文检索引擎而
不是数据库引擎.
所以它在索引字段的查询上肯定比不过mysql的, 如果这样也比mysql快那mysql的开发人员就太没面子了.
全文检索就是类似 like 这样的查询,你把='xxxx'改成like '%xxxx%'就可以看出sphinx的作用了.
像name这种字段,比较短,还不能充分展现出全文检索的威力. 更一般的来讲,全文检索的应用场合是比较长的字段, 比如说blog的内容字段.我要查询blog内容中有'苹果'这两个字的记录,用like查询直接就死掉了.这才是全文检索的用武之地.
而sphinx的这个索引,只是在既需要全文检索又需要其他查询条件时才一起用,像你这种只是
name='xxx'的查询千万不要用sphinx的检索,这样只会适得其反.
作为一个比较简单的判定方式, 如果查询中没有like这样的查询条件就不要用sphinx的查询
~