mysql全文索引 很慢,速度不如like的百分之一
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql全文索引 很慢,速度不如like的百分之一相关的知识,希望对你有一定的参考价值。
我遇到的问题就是,mysql的全文索引特别慢,无论是查询还是删除,
删除127条用207秒。
数据量是10W,每条记录的字段不是很大。整个数据库一共230M。
是本机的 mysql
这个是数据表的结构
这个是建的索引
这是两个sql语句
第一个sql的信息
第二个sql的信息
下面是执行的时间,依次是第一个和第二个
接下来,分析下原因:
sql1:执行步骤:先s_a和s_a_t两表笛卡尔集,然后筛选满足on条件的,接着在从结果集中筛选满足where字句的;该过程中处理的记录条目为69*105479,并且未用到任何索引,未用到的原因可能是你先定义了一个复合索引a_concent_split(a_title_split,a_content_split),然后又定义了一个a_content_split2(a_content_split),当引擎执行查找优化时候会先用到a_content_split,可是又由于复合索引是从最左边开始(不能跳过第一个字段),而你却忽略了a_title_split字段,故未能正常使用索引。
sql2:执行步骤:先调用where字句对s_a表进行筛选形成新的s_a表,然后与s_a_t表笛卡尔积,再利用on字句筛选,最后再次利用where字句形成最终结果集;经过第一个where,该过程处理结果集会大幅少于sql1,并且该过程还用到了主键索引。你所设置的fulltext索引再次没有用到,原因是like字句中开始部分为模糊匹配%时候用不了全文索引,这与fulltext存储机制有关。
另,你说的删除速度慢,原因:设置fulltext字段设置太多,fulltext索引在更新删除大量数据时候,需要同步更改索引,你的三个fulltext压力太大!
改进方法:1、删除a_content_split索引重试 2、在删除时候打开delay_key_write变量
有关fulltext比较复杂,用的时候要谨慎设置,还有很多参数也对其有影响
另外sql语句中外连接有关on where字句也是个比较绕的地方,两者你都占了,唉,所以我写的略复杂,前天看到该问题,思忖两天这才作答
望有结果了予以回复交流!追问
好的,这个问题我放一下,明后天在处理,今天还有其他事情要做,
谢谢你,这事好歹有点眉路了,
结果一定告诉你
对数据库有大量数据的读写时,使用读写分离和数据库数据同步来实现数据的读和写
以上是关于mysql全文索引 很慢,速度不如like的百分之一的主要内容,如果未能解决你的问题,请参考以下文章