索引的目的是提高你的查询速度,当然附带的后果就是会降低你的数据更新的性能,索引的创建依据一般都是根据你实际使用情况而定,也就是说你要用哪个或者那几个字段作为查询条件,就在这个字段或者这些字段上面建立索引,也就是所谓的单字段索引和复合字段索引,比如:
select * from student where id = 1
上面这种情况那自然就是在id上建立索引,复合索引以此类推,索引不是随意创建的,如果你用的上,那才能建立索引,如果用不上创建索引反而会降低你的数据库性能.
建议楼主去查一下有关"利用索引查询数据提高性能"之类的帖子,这样你就能对索引的意义有比较深刻的了解了.
索引只是优化的一种方式
查询的效率受限于网络、服务主机的资源情况以及数据库的存储结构以及索引等综合情况来说的,并不是说建了索引就一定很快
建议你综合的看一下哪条SQL语句查询慢,解释一下,看看瓶颈在哪里,去学习一些数据库的优化知识以及SQL优化技巧
mysql千万数据加索引卡死关键字?
想到了从以下方法进行解决:
①.)重写Sql,让查询命中索引
由于对于加索引的一些担忧,于是我在本地先尝试了一下(本地数据和线上数据量基本一致,相差不大),结果没想到还挺快的,对于写入的性能也没多大的影响.加入索引后页面秒开,效果很好.
假如你有一个表,
SELECT * FROM test_tab WHERE name = 一个外部输入的数据
刚开始,数据不多的时候,执行效果还不错.
随着数据量的增加,这个查询,执行起来,越来越慢了.
然后在 name 上面 建立了索引
这样, 可以加快前面那个查询的速度.
但是,某天,你执行了下面这个SQL, 发现速度又慢了
为啥呢? 因为 age 字段上面,没有索引
索引只在 name 上面有
换句话说, 也就是 WHERE 里面的条件, 会自动判断,有没有 可用的索引,如果有, 该不该用.
例如:CREATE INDEX idx_test_name_age ON test_tab (name, age);那么SELECT * FROM test_tabWHEREname LIKE '张%'
这样的查询,将能够使用上面的索引.
多列索引,还有一个可用的情况就是, 某些情况下,可能查询,只访问索引就足够了, 不需要再访问表了.例如:SELECTAVG( avg ) AS 平均年龄FROMtest_tabWHEREname LIKE '张%'
这个时候, name 与 age 都包含在索引里面. 查询不需要去检索表中的数据.
使用索引是数据库性能优化的必备技能之一.在MySQL数据库中,有四种索引:聚集索引(主键索引)、普通索引、唯一索引以及我们这里将要介绍的全文索引(FULLTEXT INDEX).
全文索引(也称全文检索)是目前搜索引擎使用的一种关键技术.它能够利用「分词技术「等多种算法智能分析出文本文字中关键字词的频率及重要性,然后按照一定的算法规则智能地筛选出我们想要的搜索结果.今天这一节,我们就不追根究底其底层实现原理了,现在我们来看看在MySQL中如何创建并使用全文索引.
在MySQL中,创建全文索引相对比较简单.例如,我们有一个文章表(article),其中有主键ID(id)、文章标题(title)、文章内容(content)三个字段.现在我们希望能够在title和content两个列上创建全文索引,article表及全文索引的创建SQL语句如下:
--创建article表
CREATE TABLE article (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
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进行介绍.
索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引.组合索引,即一个索包含多个列.
MySQL索引类型包括:
(1)普通索引
这是最基本的索引,它没有任何限制.它有以下几种创建方式:
+创建索引
CREATE
INDEX
indexName
ON
mytable(username(length));
如果是
CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定
length,下同.
+修改表结构
ALTER
mytable
ADD
[indexName]
(username(length))
+
创建表的时候直接指定
TABLE
mytable(
ID
INT
NOT
NULL,
username
删除索引的语法:
DROP
mytable;
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值.如果是组合索引,则列值的组合必须唯一.它有以下几种创建方式:
UNIQUE
mytable(username(length))
+创建表的时候直接指定
它是一种特殊的唯一索引,不允许有空值.一般是在建表的时候同时创建主键索引:
PRIMARY
KEY(ID)
当然也可以用
命令.记住:一个表只能有一个主键.
为了形象地对比单列索引和组合索引,为表添加多个字段:
city
age
NULL
以上就是土嘎嘎小编为大家整理的mysql怎么加索引相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!