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. Oracle 12C -- temporal validity

    temporal validity需要在创建表的时候使用一个vaild-time维度(包含时间起始和结束) 创建有valid-time维度的表 (1)显式指定两个date-time列 SQL> ...

  2. 实现超级简单的bug管理系统

    大家可以试着去实现一个超级简单的bug管理系统 不需要鉴权,也就是不需要登陆 有tag管理功能,缺陷上可以加tag,通过tag区分bug的状态和类型 bug的增删改查功能 bug描述支持markdow ...

  3. Python控制台输出带颜色的文字(高亮显示)方法

    在开发项目过程中,为了方便调试代码,经常会向stdout中输出一些日志,默认的这些日志就直接显示在了终端中.而一般的应用服务器,第三方库,甚至服务器的一些通告也会在终端中显示,这样就搅乱了我们想要的信 ...

  4. STM8的数据@near @tiny定义

    总是记不住这个:stm8 stvd下 near等于51的xdata tiny等于51的idata http://www.waveshare.net/article/STM8-3-1-10.htm 如何 ...

  5. PySpark 行列转换

    Spark实现行列转换pivot和unpivot 背景 做过数据清洗ETL工作的都知道,行列转换是一个常见的数据整理需求. 首先明确一下啥叫行列转换,因为这个叫法也不是很统一,有的地方叫转置,有的地方 ...

  6. 【R】R语言常用函数

    R语言常用函数 基本 一.数据管理vector:向量 numeric:数值型向量 logical:逻辑型向量character:字符型向量 list:列表 data.frame:数据框c:连接为向量或 ...

  7. IE报错:The given path's format is not supported

    在使用FileUpload控件进行上传EXCEL文件时,本地调试上传无问题,但是发布之后报地址无效错误 一.出现这个错误的主要原因是,在本地上传图片的时候HttpPostedFileBase对象里面保 ...

  8. bulk insert 在mssql中使用

    从远程数据文件中批量导入 若要使用 BULK INSERT 从其他计算机中大容量导入数据,必须在两台计算机之间共享数据文件. 指定共享数据文件时,请使用它的通用命名约定 (UNC) 名称,其一般形式为 ...

  9. 高级数据库及一步一步搭建versant数据库

    总的来说,高级数据库课程分为分布式数据库和面向对象数据库两块.分布式数据库介绍了分布式数据库的方方面面,包括数据库系统的设计.查询处理优化.事务管理和恢复.并发控制.可靠性.安全性与目录管理等.面向对 ...

  10. 每日英语:The Benefits of a Better Men's T-Shirt

    "I WEAR A T-shirt and jeans every single day," said Erik Schnakenberg, 30, co-founder of t ...