当一个数据库中的数量足够大的时候,索引就对快速搜索数据起到很重要的作用,当然规范的sql语句也对数据查询起到很重要的作用比如我这里有一张数据库表le_lommo 里面有数据
二千多万条
select count(1) from le_lommo
数据也是相当的大了,如果我使用不规范的sql 语句会是什么结果??
select * from le_lommo
这里不仅仅导致查询缓慢的问题了,而是直接导致数据库崩了,所以sql语句规范书写是多么的重要!!当然数据过多的时候一般都会进行分库分表操作,这都是课外话题了,今天主要讲解的索引的使用废话不多说进入正题。
主键的分类:
1.主键索引;
2.普通索引;
3.唯一索引;
4.全文索引;
1.主键索引
一张表中只能有一个主键索引,但是可以添加多个索引
我们在创建表格的时候一般都是给每张表创建一个自增id
单独创建方法:alter table table_name add primary key(column name);
主键的特点:非空且唯一。
2.唯一索引
创建唯一索引:alter table table_name ADD unique(column);
主键索引和唯一索引的区别:
唯一索引:可以有多个null 内容不允许重复;
主键索引:不为null ,且内容唯一;
我在创建唯一索引的时候出现了这个错误,这就是上面提到的唯一索引的创建条件内容不为空,因为我的创建的索引列存在重复数据,因为数据量多大这里我也没有办法一一删除了,为了呈现效果我又单独增加了一列数据
在不增加索引的时候查询效率怎样呢?
select * from le_lommo where site="shangahi@10002"
二千七百万条数据用了2.614s 我这是单表查询 哟
下面我们添加唯一索引 (创建索引也是相当的耗时 用了我12分钟左右 )
查询速度也是相当快的
3.普通索引
创建普通索引:alter table table_name add index 索引名(column)
4.全文索引
全文索引只有MyISAM y有效(mysql5.6之后的InnoDB也支持全文索引)
全文所有主要针对文本文件,标题, 文章等,
创建全文索引:
SELECT * FROM article WHERE MATCH(title,content) AGAINST (‘查询字符串');
创建完全文索引之后使用也有要注意的地方:
众所周知在数据库中进行模糊查询是使用like关键字进行查询的,例如:
SELECT * FROM article WHERE content LIKE ‘%查询字符串%';
那么,我们在使用全文索引也这样使用吗?当然不是,我们必须使用特有的语法才能使用全文索引进行查询,例如,我们想要在article表的title和content列中全文检索指定的查询字符串,我们可以如下编写SQL语句
SELECT * FROM article WHERE MATCH(title,content) AGAINST (‘查询字符串');
强烈注意:MySql自带的全文索引只能对英文进行全文检索,目前无法对中文进行全文检索。如果需要对包含中文在内的文本数据进行全文检索,我们需要采用Sphinx(斯芬克斯)/Coreseek技术来处理中文。
注:目前,使用MySql自带的全文索引时,如果查询字符串的长度过短将无法得到期望的搜索结果。MySql全文索引所能找到的词默认最小长度为4个字符。另外,如果查询的字符串包含停止词,那么该停止词将会被忽略。
如果可能,请尽量先创建表并插入所有数据后再创建全文索引,而不要在创建表时就直接创建全文索引,因为前者比后者的全文索引效率要高。
索引的优点:
1.大大加快数据的检索速度;
2.创建唯一性索引,保证数据库每一行的数据的唯一性;
3.加速表与表之间的连接;
4.在使用分组和排序字句进行数据检索时,可以显著减少查询分组和排序的时间。