insert into test_fulltext values("王正科技全文")

select * from test_fulltext where data like "%王正%"

能够搜索到新插入的一行数据。

data字段并不是全文索引字段。

其实反而不要使用match against去搜索,也就是不要使用全文搜索,使用全文搜索的话,会进入全文索引结构中去寻找数据。而刚好mysql对中文分词支持存在问题。所以mysql全文索引中建立的词典索引中不存在那个词语,比如

select * from test_fulltext where MATCH(data) AGAINST('王正'IN BOOLEAN MODE )

提示此表不支持全文索引,也就是没有建立成全文索引

读者若有什么更好的看法,欢迎讨论

ALTER TABLE `test_fulltext`
ADD FULLTEXT INDEX `idx_data` (`data`) USING HASH ;

BTREE

上面都错误,正确sql为:

ALTER TABLE `test_fulltext` ADD FULLTEXT (
`data`
)

因为全文索引不存在使用btree还是hash方式进行索引。就是一个词典,何来这种索引?

建立成全文索引后,使用

select * from test_fulltext WHERE MATCH(`data`) AGAINST('王正'IN BOOLEAN MODE)

搜索不到

使用王正反而更加能够搜到到。

结论:like这种搜索,是全表扫描。是对字段中出现的内容全部进行匹配。相等匹配。不是不可以,就是效率低下,当数据量大的情况下很慢

数据库的实现思路可能为:逐个扫描所有行,然后拿到字段的内容。比如拿到了此行data字段的内容,然后把内容当成一个字符串去里面查找是否有出现过的词语

类似于 php的代码实现
if(strpos($data字段内容,要查找的字符串))!==false)
{
找到了字符串
}

like匹配是基于字符串的匹配(%就是对应正则匹配,也是字符串配对),这样的方式需要扫描表的所有行,拿到每行的内容进行字符串匹配。其实我的理解是:最大瓶颈就是需要全表扫描。至于里面的%正则匹配倒不是很大问题,这里速度不会成为瓶颈,反而全表扫描耗费是时间比较长是一个大问题。

数据库like匹配的实现猜测的更多相关文章

  1. php随笔2-php+ajax 实现输入读取数据库显示匹配信息

    dropbox_index.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  2. Python for Infomatics 第14章 数据库和SQL应用三(译)

    14.5 SQL 总结 到目前为止,我们在Python示例程序中使用了SQL,并且涉及了许多SQL基础.在这一小节中,我们特别审视SQL语言,并对其语法进行回顾. 虽然有很多不同的数据库供应商,但因S ...

  3. SQL Server 数据库子查询基本语法

    一.SQL子查询语句 1.单行子查询        select ename,deptno,sal        from emp        where deptno=(select deptno ...

  4. 使用CodeFirst创建并更新数据库

    本文主要介绍如何使用CodeFirst模式来新建并更新数据库 在使用Entity Framwork的三种方式(ModelFist.DBFirst.CodeFirst)中,CodeFirst方式书写的代 ...

  5. MySQL常用数据库小结

    SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL-数据控制语言(GRAN ...

  6. 数据库—SQL语句

    下列语句部分是Mssql语句,不可以在access中使用. SQL分类:   DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)   DML—数据操纵语言(SELECT,DEL ...

  7. 基于现有数据库的Code First模式迁移更新数据库

    本文讨论的内容是基于EF4.1版本.文中谈论的现有的数据库不是由EF创建.本文假定你已经对Code First迁移有一定的了解,如果不了解Code First迁移更新数据库可以查看 文章涉及的主题如下 ...

  8. psql-05数据库,模式

    数据的组织结构 数据库:表,索引:数据行 PostgreSQL中一个服务(实例)可以有多个数据库:而一个数据库不能属于多个实例; 数据库 创建数据库 create database name [own ...

  9. OAF_JDBC系列1 - 数据库交互取值方式(案例)

    2014-06-15 Created By BaoXinjian

随机推荐

  1. Leetcode 编程训练

    Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google.微软.Facebook.Amazon之类的这些公司,基本上是 ...

  2. java中的switch case default break

    package com.didispace; /** * Created by gmq on 2017/08/07. * * @version 1.0 * @since 2017/08/07 10:4 ...

  3. springboot 多环境配置yml或properties

    https://www.cnblogs.com/mr-yang-localhost/p/8971327.html   springboot 多环境配置 https://blog.csdn.net/li ...

  4. Vue的计算属性和侦听器

    1 计算属性:他是根据对象已有的属性计算出新的属性值.具有缓存的功能,如果原始属性不变,则用缓存.否则,重新计算. 前端 <form> <label>姓</label&g ...

  5. PHP断点调试工具Xdebug的安装

    Xdebug是一个PHP程序调试器,可以用来跟踪,调试和分析PHP程序的运行状况.其实调试PHP还有其他工具比如Zend Debugger,但zend官方不是免费发布的,后来更新为zend Serve ...

  6. centOS7 安装man中文手册

    [root@localhost ~]# yum list | grep man.*zh -.el7 base [root@localhost ~]# yum -y install man-pages- ...

  7. metaspolit 命令大全

    一.msfconsole相关命令 二.database 三.autopwn自动化攻击工具 四.metaspolit常见渗透命令大全

  8. php7+apache2.4 (Windows7下)安装

    条件: ( 电脑必须win7 sp1, .netframework4 ) 一.下载php7和apache2.4 首先下载php7的windows压缩包,到这里下载http://windows.php. ...

  9. iframe父页面获取iframe子页面的元素 与 iframe子页面获取父页面元素

    一.在iframe子页面获取父页面元素代码如下:$('#objld', parent.document); 二.在父页面获取iframe子页面的元素代码如下:$("#objid", ...

  10. C#中对于Enum类型的遍历

    假设有enum类型定义为MyEnumType 则可以这样遍历:  //遍历 枚举类型中的所有成员 foreach (MyEnumType type in Enum.GetValues(typeof(M ...