mysql如何建立索引

我们可以通过查看索引的属性来判断创建索引的方法。

mysql 添加索引语句 mysql加索引怎么加mysql 添加索引语句 mysql加索引怎么加


mysql 添加索引语句 mysql加索引怎么加


查看索引的语法格式如下:

SHOW INDEX FROM <表名> [ FROM <数据库名>]

语法说明如下:

<表名>:指定需要查看索引的数据表名。

<数据库名>:指定需要查看索引的数据表所在的数据库,可省略。比如,SHOW INDEX FROM student FROM test; 语句表示查看 test 数据库中 student 数据表的索引。

示例

使用 SHOW INDEX 语句查看《MySQL创建索引》一节中 tb_stu_2 数据表的索引信息,SQL 语句和运行结果如下所示。

mysql> SHOW INDEX FROM tb_stu_2G

1. row

Table: tb_stu_2

Non_unique: 0

Key_name: height

Seq_in_index: 1

Column_name: height

Cardinality: 0

Packed: NULL

Null: YES

Index_type: BTREE

Comment:

Index_comment:

1 row in set (0.03 sec)

其中各主要参数说明如下:

Sub_part: NULL参数 说明

Table 表示创建索引的数据表名,这里是 tb_stu_2 数据表。

Non_unique 表示该索引是否是索引。若不是索引,则该列的值为 1;若是索引,则该列的值为 0。

Key_name 表示索引的名称。

Seq_in_index 表示该列在索引中的位置,如果索引是单列的,则该列的值为 1;如果索引是组合索引,则该列的值为每列在索引定义中的顺序。

Column_name 表MySQL中的索引类型有以下几种示定义索引的列字段。

Collation 表示列以何种顺序存储在索引中。在 MySQL 中,升序显示值“A”(升序),若显示为 NULL,则表示无分类。

Cardinality 索引中值数目的估计值。基数根据被存储为整数的统计数据计数,所以即使对于小型表,该值也没有必要是的。基数越大,当进行联合时,MySQL 使用该索引的机会就越大。

Sub_part 表示列中被编入索引的字符的数量。若列只是部分被编入索引,则该列的值为被编入索引的字符的数目;若整列被编入索引,则该列的值为 NULL。

Packed 指示关键字如何被压缩。若没有被压缩,值为 NULL。

Null 用于显示索引列中是否包含 NULL。若列含有 NULL,该列的值为 YES。若没有,则该列的值为 NO。

Index_type 显示索引使用的类型和方法(BTREE、FULLTEXT、HASH、RTREE)。

Comment 显示评注。

mysql索引类型有哪些

`title` char(255) CHARACTER NOT NULL ,

mysql中索引类型有:最基本的没有限制的普通索引,索引列的值必须的索引,主键索引,多个字段上创建的组合索引以及用来查找文本中的关键字的全文索引

【课程:MySQL教程】

普通索引

索引

主键索引

组合索引

全文索+------------+-------------+------+-----+---------+-------+引

1、普通索引

是最基本的索引,它没有任何限制。它有以下几种创建方式:

直接创建索引

CREATE INDEX index_name ON table(column(length))修改表结构的方式添加索引

ALTER TABLE table_name ADD INDEX index_name ON (column(length))创建表的时候同时创建索引

CREATE TABLE `table` (

`id` int(11) NOT NULL AUTO_INCREMENT ,

`content` text CHARACTER NULL ,

`time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`), INDEX index_name (title(length))

)删除索引

DROP INDEX index_name ON table2、索引

与前面的普通索引类似,不同的就是:索引列的值必须,但允许有空值。如果是组合索引,则列值的组合必须。它有以下几种创建方式:

创建索引

CREATE UNIQUE INDEX indexName ON table(column(length))修改表结构

ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))创建表的时候直接指定

CREATE TABLE `table` (

`id` int(11) NOT NULL AUTO_INCREMENT ,

`content` text CHARACTER NULL ,

`time` int(10) NULL DEFAULT NULL ,

是一种特殊的索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引:

CREATE TABLE `table` (

`id` int(11) NOT NULL AUTO_INCREMENT ,

`title` char(255) NOT NULL , PRIMARY KEY (`id`)

);4、组合索引

指多个字段上创建的索引,只有在查询条件中使用了创建索引时的个字段,索引才会被使用。使用组合索引时遵循最左前缀

ALTER TABLE `table` ADD INDEX name_city_age (name,city,age);5、全文索引

主要用来查找文本中的关键字,而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的where语句的参数匹配。fulltext索引配合match against作使用,而不是一般的where语句加like。它可以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。

创建表的适合添加全文索引

CREATE TABLE `table` (

`id` int(11) NOT NULL AUTO_INCREMENT ,

`content` text CHARACTER NULL ,

`time` int(10) NULL DEFAULT NULL , PRIMARY KEY (`id`),

FULLTEXT (content)

);修改表结构添加全文索引

ALTER TABLE article ADD FULLTEXT index_content(content)直接创建索引

CREATE FULLTEXT INDEX index_content ON article(content)缺点

1、虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行insert、update和delete。因为更新表时,不仅要保存数据,还要保存一下索引文件。

2、建立索引会占用磁盘空间的索引文件。一般情况这个问题不太,但如果你在一个大表上创建了多种组合索引,索引文件的会增长很快。索引只是提高效率的一个因素,如果有大数据量的表,就需要花时间研究建立秀的索引,或优化查询语句。

注意事项

使用索引时,有以下一些技巧和注意事项:

1、索引不会包含有null值的列

只要列中包含有null值都将不会被包含在索引中,复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为null。

2、使用短索引

那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O作。

3、索引列排序

查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符

合要求的情况下不要使用排序作;尽量不要包含多个列的排序,如果需要给这些列创建复合索引。

4、like语句作

一般情况下不使用like作,如果非使用不可,如何使用也是一个问题。like “%%” 不会使用索引而like “%”可以使用索引。

5、不要在列上进行运算,这将导致索引失效而进行全表扫描,例如

SELECT FROM table_name WHERE YEAR(column_name)<2017;6、不使用not in和<>作

mysql怎么添加索引sql语句

name VARCHAR(20),

工具:mysql数据库创建一个user的表里边的字段

◆修改表结构

1.普通索引 添加INDEX

ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

下面演示下给user表的name字段添加一个索引

2.主键索引 添加PRIMARY KEY

ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

ALTER TABLE `table_name` ADD UNIQUE ( `column` )

4.全文索引 添加FULLTEXT

ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.如何添加多列索引

如何建立索引

UNIQUE indexName (title(length))

如何建立索引 建立索引的方法取决于你使用的数据库管理系统。以下是几种常见的数据库管理系统建立索引的方法:

Collation: A

MySQL 在MySQL中,你可以使用CREATE INDEX语句来创建索引。例如,如果你想在名为"users"的表中创建一个名为"username_index"的索引,可以使用以下命令:

CREATE INDEX username_index ON users (username); PostgreSQL 在PostgreSQL中,你可以使用CREATE INDEX语句来创建索引。例如,如果你想在名为"users"的表中创建一个名为"username_index"的索引,可以使用以下命令:

CREATE INDEX username_index ON users (username); Oracle 在Oracle中,你可以使用CREATE INDEX语句来创建索引。例如,如果你想在名为"users"的表中创建一个名为"username_index"的索引,可以使用以下命令:

CREATE INDEX username_index ON users (username); 以上是几种常见的数据库管理系统建立索引的方法。请注意,建立索引需要一定的数据库管理知识和技能,建议在建立索引之前先了解相关的数据库管理知识和技能。

如何正确建立MYSQL数据库索引

3.索引 添加UNIQUE

索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。

在数据库表中,对字段建立索引可以大大提高查询速度。如我们创建了一个 mytable表:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin。

在查找username="admin"的记录 SELECT FROM mytable WHERE username=‘admin‘;时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记录。相反,MySQL会扫描所有记录,即要查询10000条记录。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。

MySQL索引类型包括:

(1)普通索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

◆创建索引

CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。

ALTER mytable ADD INDEX [indexName] ON (username(length))

◆创建表的时候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );

删除索引的语法:

DROP INDEX [indexName] ON mytable;

(2)索引

它与前面的普通索引类似,不同的就是:索引列的值必须,但允许有空值。如果是组合索引,则列值的组合必须。它有以下几种创建方式:

◆创建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length))

ALTER mytable ADD UNIQUE [indexName] ON (username(length))

◆创建表的时候直接指定

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );

(3)主键索引

它是一种特殊的索引,不允许有空值。一般是在建表的时候同时创建主键索引:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) ); 当然也可以用 ALTER 命令。记住:一个表只能有一个主键。

(4)组合索引

为了形象地对比单列索引和组合索引,为表添加多个字段:

CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL ); 为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 建表时,usernname长度为 16,这里用 10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。

如果分别在 usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最的单列索引。

建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:

usernname,city,age usernname,city usernname 为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:

SELECT FROM mytable WHREE username="admin" AND city="郑州"

SELECT FROM mytable WHREE username="admin"

而下面几个则不会用到:

SELECT FROM mytable WHREE city="郑州"

比如有一条语句是这样的:select from users where area=’beijing’ and age=22;

如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。

如果我们创建了 (area, age,salary)的复合索引,那么其实相当于创建了 (area,age,salary)、(area,age)、(area)三个索引,这被称为“左前缀”特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

(5)建立索引的时机

到这里我们已经学会了建立索引,那么我们需要在什么情况下建立索引呢?一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。例如:

SELECT t.Name FROM mytable t LEFT JOIN mytable m ON t.Name=m.username WHERE m.age=20 AND m.city=‘郑州‘ 此时就需要对city和age建立索引,由于mytable表的userame也出现在了JOIN子句中,也要对它建立索引的必要。

刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时,MySQL不会使用索引。例如下句会使用索引:

而下句就不会使用:

SELECT FROM mytable WHEREt Name like‘%admin‘ 因此,在使用LIKE时应注意以上的区别。

对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索致。如果不加

索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下

降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过渡索引。

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:

◆虽然索引大大提高了查询速度,但同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

◆建立索引会占用磁盘空间的索引文件。一般情况这个问题不太,但如果你在一个大表上创建了多种组合索引,索引文件就会膨胀的很快。

索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立秀的索引,或优化查询语句。

(7)使用索引的注意事项

使用索引时,有以下一些技巧和注意事项:

◆索引不会包含有NULL值的列

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

◆使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O作。

◆索引列排序

Mysql查询每次只能使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序作;尽量不要包含多个列的排序,如果需要给这些列创建复合索引。

◆like语句作

一般情况下不鼓励使用like作,如果非使用不可,如何使用也是一个问题。like “%%” 不会使用索引,而like “%”可以使用索引。

◆不要在列上进行运算

select from users where YEAR(adddate)<2007; 将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:

select from users where adddate<‘2007-01-01’;

◆不使用NOT IN和<>作

以上,就对其中MySQL索引类型进行了介绍。 ######################################################################################################################

表的主键

自动建立索引

如zl_yhjbqk(用户基本情况)中的hbs_bh(户标识编号)

表的字段约束

ORACLE利用索引来保证数据的完整性

如lc_hj(流程环节)中的lc_bh+hj_sx(流程编号+环节顺序)

直接条件查询的字段

在SQL中用于条件约束的字段

如zl_yhjbqk(用户基本情况)中的qc_bh(区册编号)

select from zl_yhjbqk where qc_bh=<2000 andqc_bh>=5000;

查询中与其它表关联的字段

字段常常建立了外键关系

如zl_ydcf(用电成份)中的jldb_bh(计量点表编号)

select from zl_ydcf a,zl_yhdb b where a.jldb_bh=b.jldb_bh and b.jldb_bh=’540100214511’

查询中排序的字段

排序的字段如果通过索引去访问那将大大提高排序速度

select from zl_yhjbqk order by qc_bh(建立qc_bh索引)

select from zl_yhjbqk where qc_bh=’7001’ order by cb_sx(建立qc_bh+cb_sx复合索引,注:只是一个索引,其中包括qc_bh和cb_sx字段)

查询中统计或分组统计的字段

select max(hbs_bh) from zl_yhjbqk

select qc_bh,count() from zl_yhjbqk group by qc_bh 什么情况下应不建或少建索引

表记录太少

如果一个表只有5条记录,采用索引去访问记录的话,那首先需访问索引表,再通过索引表访问数据表,一般索引表与数据表不在同一个数据块,这种情况下ORACLE至少要往返读取数据块两次。而不用索引的情况下ORACLE会将所有的数据一次读出,处理速度显然会比用索引快。

如表zl_sybm(使用部门)一般只有几条记录,除了主键外对任何一个字段建索引都不会产生性能优化,实际上如果对这个表进行了统计分析后ORACLE也不会用你建的索引,而是自动执行全表访问。如:

select from zl_sybm where sydw_bh=’5401’(对sydw_bh建立索引不会产生性能优化)

经常插入、删除、修改的表

对一些经常处理的业务表应在查询允许的情况下尽量减少索引,如 zl_yhbm,gc_dfss,gc_dfys,gc_fpdy等业务表。

数据重复且分布平均的表字段(如:性别字段)

如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为 50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。

经常和主字段一块查询但主字段索引值比较多的表字段

如gc_dfss(电费实收)表经常按收费序号、用户标识编号、抄表日期、电费发生年月、作 标志来具体查询某一笔收款的情况,如果将所有的字段都建在一个索引里那将会增加数据的修改、插入、删除时间,从实际上分析一笔收款如果按收费序号索引就已 经将记录减少到只有几条,如果再按后面的几个字段索引查询将对性能不产生太大的影响。 对千万级MySQL数据库建立索引的事项及提高性能的手段

一、注意事项:

首先,应当考虑表空间和磁盘空间是否足够。我们知道索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此在对一大表建立索引的时候首先应当考虑的是空间容量问题。

其次,在对建立索引的时候要对表进行加锁,因此应当注意作在业务空闲的时候进行。

二、性能调整方面:

首当其冲的考虑因素便是磁盘I/O。物理上,应当尽量把索引与数据分散到不同的磁盘上(不考虑阵列的情况)。逻辑上,数据表空间与索引表空间分开。这是在建索引时应当遵守的基本准则。

其次,我们知道,在建立索引的时候要对表进行全表的扫描工作,因此,应当考虑调大初始化参数 db_file_multiblock_read_count的值。一般设置为32或更大。

再次,建立索引除了要进行全表扫描对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个char(255)的列,如果在前10个或20个字符内,多数值是的,外同时还要对数据进行大量的排序作,因此,应当调整排序区的大小。

9i以后,如果初始化参数workarea_size_policy的值为TRUE,则排序区从pga_aggregate_target里自动分配获得。

,建立索引的时候,可以加上nologging选项。以减少在建立索引过程中产生的大量 redo,从而提高执行的速度。 ######################################################################################################################

一般来说,以下的栏位都必须记得加上索引:

1、关联查询的外键字段要加索引(Foreign key)

2、会被排序的栏位(被放在order方法中)

3、会被查询的栏位(被放在where方法中)

4、会被group的栏位(被放在group方法中)

写少读多就多建索引, 写多读少就少建索引, 数据量少就不建索引。

设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率。

如何正确建立MYSQL数据库索引

标签:

mysql怎么创建索引

SELECT FROM mytable WHERE username like‘admin%‘

1.添加PRIMARY KEY(主键索引)

mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(索引)

mysql>ALTER TABLE `table_name` ADD UNIQUE (

`column`

)3.添加INDEX(普通索引)

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引)

mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.添加多列索引

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

下面是更加详细的方法

MyALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )SQL中可以使用alter table这个SQL语句来为表中的字段添加索引。

使用alter table语句来为表中的字段添加索引的基本语法是:

ALTER TABLE <表名> ADD INDEX (<字段>);

我们来尝试为test中t_name字段添加一个索引。

mysql> alter table test add index(t_name);

Query OK, 0 rows affected (0.17 sec)

Records: 0 Duplicates: 0 Warnings: 0

执行成功后,我们来看看结果。

mysql> describe test;

| Field | Type | Null | Key | Default | Extra |

| t_id | int(11) | YES | | NULL | |

| t_name | varchar(50) | NO | MUL | NULL | |

| t_password | char(32) | YES | | NULL | |

| t_birth | date | YES | | NULL | |

4 rows in set (0.00 sec)

结果可以看出,t_name字段的Key这一栏由原来的空白变成了MUL。这个MUL是什么意思呢?简单解释一下:如果Key是MUL,那么该列的值可以重复,该列是一个非索引的前导列(列)或者是一个性索引的组成部分但是可以含有空值NULL。

怎么MySql添加全文索引

(6)索引的不足之处

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

全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术。它能够利用「分词技术「等多种算法智能分析出文本文字中关键字词的频率及重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果。在这里,我们就不追根究底其底层实现原理了,现在我们来看看在MySQL中如何创建并使用全文索引。

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

--创建article表

CREATE TABLE article (

id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,

title VARCHAR(200),

content TEXT,

FULLTEXT (title, content) --在title和content列上创建全文索引

);

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

--给现有的article表的title和content字段创建全文索引

--索引名称为fulltext_article

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技术来处理中文。本站将会在后续文章中对Sphinx以及Coreseek进行介绍。

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

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

MYSQL如何添加索引

9i之前,可以在session级别上加大sort_area_size的大小,比如设置为100m或者更大。

Mysql添加索引的方式有以下几种

1. 在创建表的时候添加

CREATE TABLE customer(

id INT NOT NULL AUTO_INCREMENT,

PRIMARY KEY(id) UNIQUE KEY `UK_student_name` (`name`)

)ENGINE=INNODB DEFAULT CHARSET=utf82. 单独对表中的列创建索引

创建索);3、主键索引引:

create unique index UK_student_name on student (name);3. 对表中的列添加约束

alter table student add constraint uk_student_name unique (name);