mysql创建全文索引

原文链接:http://www.cnblogs.com/zhouguowei/p/5216316.html

使用索引时数据库性能优化的必备技能之一。在MySql数据库中,有四种索引:聚焦索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FUNLLTEXT INDEX)。

全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用【分词技术】等多种算法智能分析出文本文字中关键词的频率和重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。

在MySql中,创建全文索引相对比较简单。例如:我们有一个文章表(article),其中有主键ID(id)、文章标题(title)、文章内容(content)三个字段。现在我们希望能够在title和content两个列上创建全文索引,article表及全文索引的创建SQL语句如下:

CREATE TABLE `article` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`title` varchar(200) DEFAULT NULL,

`content` text,

PRIMARY KEY (`id`),

FULLTEXT KEY `title` (`title`,`content`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

上面就是在创建表的同时创建全文索引的SQL示例。此外,如果我们要给已经存在的表的指定字段创建全文索引,同样以article表为例,我们可以使用如下SQL语句进行创建:

ALTER TABLE article ADD FULLTEXT INDEX fulltext_article(title,content);

在MySql中创建全文索引之后,现在就该了解如何使用了。众所周知,在数据库中进行模糊查询是使用like关键字进行查询的,例如:

SELECT * FROM article WHERE content LIKE ‘%查询字符串%’;

那么,我们在使用全文索引也这样使用吗?当然不是,我们必须使用特有的语法才能使用全文索引进行查询,例如,我们想要在article表的title和content列中全文检索指定的查询字符串,我们可以如下编写SQL语句:

SELECT * FROM article WHERE MATCH(title,content) AGAINST (‘查询字符串’);

强烈注意:MySql自带的全文索引只能用于数据库引擎为MYISAM的数据表,如果是其他数据引擎,则全文索引不会生效。此外,MySql自带的全文索引只能对英文进行全文检索,目前无法对中文进行全文检索。如果需要对包含中文在内的文本数据进行全文检索,我们需要采用Sphinx(斯芬克斯)/Coreseek技术来处理中文。

注:目前,使用MySql自带的全文索引时,如果查询字符串的长度过短将无法得到期望的搜索结果。MySql全文索引所能找到的词默认最小长度为4个字符。另外,如果查询的字符串包含停止词,那么该停止词将会被忽略。

注:如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。

时间: 2024-11-05 19:04:43

mysql创建全文索引的相关文章

MySQL中文全文索引插件 mysqlcft 1.0.0 安装使用文档[原创]

[文章+程序 作者:张宴 本文版本:v1.0 最后修改:2008.07.01 转载请注明原文链接:http://blog.zyan.cc/post/356/] MySQL在高并发连接.数据库记录数较多的情况下,SELECT ... WHERE ... LIKE '%...%'的全文搜索方式不仅效率差,而且以通配符%和_开头作查询时,使用不到索引,需要全表扫描,对数据库的压力也很大.MySQL针对这一问题提供了一种全文索引解决方案,这不仅仅提高了性能和效率(因为MySQL对这些字段做了索引来优化搜

mysql创建索引以及对索引的理解

创建索引是指在某个表的一列或多列上建立一个索引,以便提高对表的访问速度.创建索引有3种方式,这3种方式分别是创建表的时候创建索引.在已经存在的表上创建索引和使用ALTER TABLE语句来创建索引.本节将详细讲解这3种创建索引的方法. 7.2.1  创建表的时候创建索引(1) 创建表时可以直接创建索引,这种方式最简单.方便.其基本形式如下: CREATE TABLE  表名( 属性名 数据类型[完整性约束条件], 属性名 数据类型[完整性约束条件], ...... 属性名 数据类型  [ UNI

【MySQL】2、MySQL 创建数据库和表

2.MySQL 创建数据库和表 2.1.创建数据库 CREATE DATABASE 语句用于在 MySQL 中创建数据库. CREATE DATABASE database_name 为了让 PHP 执行上面的语句,我们必须使用 mysql_query() 函数(用于向 MySQL 连接发送查询或命令). 2.2.创建表 CREATE TABLE 用于在 MySQL 中创建数据库表. CREATE TABLE table_name ( column_name1 data_type, column

MySQL 之全文索引

最近在复习数据库索引部分,看到了 fulltext,也即全文索引,虽然全文索引在平时的业务中用到的不多,但是感觉它有点儿意思,所以花了点时间研究一下,特此记录. 引入概念通过数值比较.范围过滤等就可以完成绝大多数我们需要的查询,但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较.全文索引就是为这种场景设计的. 你可能会说,用 like + % 就可以实现模糊匹配了,为什么还要全文索引?like + % 在文本比较少时是合适的,但是对于大量的文本数据

mysql创建用户两次授权

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'     ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'     ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION; mysql> GRANT RELOAD,

oracle创建全文索引(oracle text)

drop table test.QQ_MsgRecord; CREATE TABLE test.QQ_MsgRecord ( msg_group VARCHAR2(200), msg_object VARCHAR2(200), msg_TIME VARCHAR2(200), msg_FROM VARCHAR2(200), msg_content VARCHAR2(4000) ); --创建全文索引 create index test.idx_QQ_MsgRecord on test.QQ_Msg

MySQL创建数据库与创建用户以及授权

MySQL创建数据库与创建用户以及授权 1.create schema [数据库名称] default character set utf8 collate utf8_general_ci;--创建数据库 采用create schema和create database创建数据库的效果一样. 2.create user '[用户名称]'@'%' identified by '[用户密码]';--创建用户 密码8位以上,包括:大写字母.小写字母.数字.特殊字符 %:匹配所有主机,该地方还可以设置成'

mysql 创建数据库和表格

mysql创建utf-8字符集数据库 CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; create table cc( id int(4) primary key auto_increment, //自增列 createtime timestamp NULL DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP //默认系统时间 )

MySQL创建高级联结

SQL允许给表取别名,这样做的两个主要理由是: 缩短SQL语句: 允许在单条SELECT语句中多次使用同一个表: 与之前相对应的我们使用别名来表示一个表: 自联结 问题:假如知道某一厂商生产的一个产品 ID 为 DTNTR有问题,需要从数据库中查找出该厂商生产的其他所有产品. 下面的SELECT语句可以将该vend_id所生产的所有产品查找出来: 现在来看使用联结的相同查询: MySQL创建高级联结,布布扣,bubuko.com