MySQL支持的四种索引_Mysql常见四种索引的使用

提到mysql优化,索引优化是必不可少的。其中一种优化方式 ——索引优化,添加合适的索引能够让项目的并发能力和抗压能力得到明显的提升。

我们知道项目性能的瓶颈主要是在"查(select)"语句,要提升"查"这一性能,mysql索引是必不可少的。接下来总结一下mysql常见的四种索引

一. 四种索引(主键索引/普通索引/全文索引/唯一索引)

1.索引的添加

1.1主键索引的添加

当一张表,把某个列设为主键的时候,则该列就是主键索引

create table a(

id int primary key auto_increment,

name varchar(20) not null default ''

);

//这里id就是表的主键

如果当创建表时没有指定主键索引,也可以在创建表之后添加:

alter table table_name add primary key (column name);

1.2普通索引

普通索引一般是在建表后再添加的,

create index 索引名 on table_name(column1,column2);

alter table table_name add index 索引名(column1,column2);

1.3全文索引

首先,全文索引主要针对文本文件,比如文章,标题,全文索引只有MyISAM有效(mysql5.6之后InnoDB也支持了全文索引)

create table c(

id int primary key auto_increment ,

title varchar(20),

content text,

fulltext(title,content)

)engine=myisam charset utf8;

insert into c(title,content) values

('MySQL Tutorial','DBMS stands for DataBase ...'),

('How To Use MySQL Well','After you went through a ...'),

('Optimizing MySQL','In this tutorial we will show ...'),

('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),

('MySQL vs. YourSQL','In the following database comparison ...'),

('MySQL Security','When configured properly, MySQL ...');

使用全文索引常见的错误:

select * from c where content like "%mysql%";

这里并不会使用全文索引,可以用explain进行查看。正确用法:

select *  from c where match(title,content) against ('MYSQL');

备注:

1.  在mysql中fulltext 索引只针对 myisam生效

2.  mysql自己提供的fulltext针对英文生效->sphinx(coreseek)技术处理中文

3.  使用方法是 match(字段名..) against(‘关键字’)

1.4唯一索引

create table d(id int primary key auto_increment , name varchar(32) unique)

d表中name就是唯一索引,唯一索引可以有多个null,不能是重复的内容

相比主键索引,主键字段不能为null,也不能重复

2. 查询索引

show indexes from table_name;

show keys from table_name;

3.删除索引

alter table table_name drop index 索引名;

二. 索引的机制

2.1 为什么我们添加完索引后查询速度为变快?

传统的查询方法,是按照表的顺序遍历的,不论查询几条数据,mysql需要将表的数据从头到尾遍历一遍

在我们添加完索引之后,mysql一般通过BTREE算法生成一个索引文件,在查询数据库时,找到索引文件进行遍历(折半查找大幅查询效率),找到相应的键从而获取数据

2.2 索引的代价

1. 创建索引是为产生索引文件的,占用磁盘空间

2. 索引文件是一个二叉树类型的文件,可想而知我们的dml操作同样也会对索引文件进行修改,所以性能会下降

2.3 在哪些column上使用索引?

1 .较频繁的作为查询条件字段应该创建索引

2. 唯一性太差的字段不适合创建索引,尽管频繁作为查询条件,例如gender性别字段

3. 更新非常频繁的字段不适合作为索引

4.不会出现在where子句中的字段不该创建索引

总结: 满足以下条件的字段,才应该创建索引.

a: 肯定在where条经常使用 b: 该字段的内容不是唯一的几个值 c: 字段内容不是频繁变化

三.索引使用注意事项

1.对于创建的多列索引,只要查询条件使用了最左边的列,索引一般就会被使用。

比如我们对title,content 添加了复合索引

select * from table_name where title = 'test';会用到索引

select * from table_name where content = 'test';不会用到索引

2.对于使用like的查询,查询如果是 ‘%a’不会使用到索引 ,而 like 'a%'就会用到索引。最前面不能使用%和_这样的变化值

3.如果条件中有or,即使其中有条件带索引也不会使用。

4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来。

四.如何查看索引使用的情况:

show status like‘Handler_read%’;

注意:

handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。

handler_read_rnd_next:这个值越高,说明查询低效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java调用、执行groovy代码

java调用、执行groovy代码 1: package test; 2: 3: import javax.script.ScriptEngine; 4: import javax.script.ScriptEngineManager; 5: import javax.script.ScriptException; 6: 7: public class ScriptExcuteUtil { 8: 9: public ScriptExcuteUtil() { 10: 11…

AGS Server 10.1 切图工具

在AGS Sever中很重要的功能就是地图缓存的制作,安装AGS Sever会在catalog中增加相关的工具箱,利用这些工具可以制作、删除、更新切片 一、Convert map server cache storage format(转换服务缓存的存储格式) 利用该工具可以快速的切换地图缓存的格式&…

0511 backlog 项目管理

SCRUM 这次的作业就是确定SCRUM的计划,确定sprint backlog的一个冲刺周期,而这个周期是两个星期。争取在两周内发布1.0版本。 本次作业以网站构建为主: ID NAMEIMPESTHOW TO DONOTES1首页99小时用户登录网站也可以看游客的推广的内容&am…

swing和MySQL登录注册_JavaSwing+Mysql实现简单的登录界面+用户是否存在验证

原生Javamysql登录验证clientlogin.java功能:实现登录页面,与服务端传来的数据验证package LoginRegister;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.regex.Pattern;import …

4月27日微软云训练营活动-现场图集

1.签到 2.到场同学,这一天是工作日,但是人气依然很火。 转载于:https://www.cnblogs.com/finehappy/p/3262296.html

vim编程 插入 保存不退出 保存退出 退出不保存 另存为其他文件名 保存覆盖现有文件...

---恢复内容开始--- 在xshell里写代码,如果需要编辑代码,可以输入 vim xxx.py ,进入vim编辑界面 这里的xxx.py表示 python的存储文件,后缀名是.py。1.插入字符 输入 i 可键入或者shift i2&…

wdcp mysql密码_wdcp默认的mysql密码是多少?

重置mysql root密码方法一、Windows环境的找回方法:1、打开cmd命令窗口,先输入命令:net stop mysql 回车 #关闭mysql服务。进入到D:\SOFT_PHP_PACKAGE\mysql\bin\ 目录下,执行mysqld --skip-grant-tables 启动MySQL Server (如果报…

Java中内存中的Heap、Stack与程序运行的关系

堆和栈的内存管理 栈的内存管理是顺序分配的,而且定长,不存在内存回收问题;而堆 则是随机分配内存,不定长度,存在内存分配和回收的问题;堆内存和栈内存的区别可以用如下的比喻来看出:使用堆内存…

ASP.NET Core的配置(5):配置的同步[设计篇]

本节所谓的“配置同步”主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步;其二、当Configuration对象承载的配置放生变换的时候如何向…

mysql 5.6 linux安装配置_linux手动安装配置mysql5.6

1.准备工作①官网下载:https://dev.mysql.com/downloads/mysql/5.6.html#downloads下载之后上传到服务器。②创建linux组用户groupadd mysqluseradd -g mysql mysql2.安装①解压,比如放到了/usr/local/,进入到该目录下,进行用z解压gz包&#…

Winodws Socket I/O模型的整理

Winodws Socket I/O模型的整理大致分以五种.其中Overlapped I/O模型是有两种实现方法. 一:select模型二:WSAAsyncSelect模型三:WSAEventSelect模型四:Overlapped I/O 事件通知模型/完成例程模型五:完成端口IOCP模型 这…

KVM安装Windows Server 2008 R2使用virtio硬盘

在上一篇文章中,我们介绍了使用IDE硬盘来安装Windows Server 2008 R2,这篇文章我们来介绍使用virtio硬盘来安装Windows Server 2008 R2。 说明:KVM默认使用的硬盘格式为virtio。 使用virtio接口的硬盘,我们必须加载virtio硬盘驱动。如果不加载…

Sublime Text 2 入门及技巧

看了 Nettuts 对 Sublime Text 2 的介绍,立刻就兴奋了,诚如作者 Jeffrey Way 所说:“《永远的毁灭公爵》都发布了,TextMate 2 还没发”,你还能指望它么?TextMate 开发者的消极态度已经无法让人忍受了。而作…

跨域名,服务器登录 .

编辑器加载中... function SingleSignOn() {//只能用脚本改变指定 Form 提交的对象 document.getElementById("form1").action"http://。。。。。/WebApp/UsersLogin.aspx"; //把隐藏控件 __VIEWSTATE 中的值变更为 LoginTransfer…

YII 配置文件

用YIIFramework的库开发 Java代码 .... Yii::createWebApplication($config); //没有run Yii::import(class1,true),在将class1类文件路径存储时,同时include该文件 注意:你也可以将配置文件分为多个文件&#xff0…

mysql 备份到别的机器_物理拷贝备份mysql到其他机器上恢复

经常会遇到mysql数据要迁徙的情况 ,逻辑导出是可以的 但是就是太慢 第三方工具也同样可以用 也是操作麻烦,最简单粗暴的方式就是直接拷贝物理文件来的最快 也很简单 当然 前提是远程服务器和目标服务器是相同的文件系统和mysql版本,不然还是没…

Hibernate映射关系总结篇

又从头学习了一遍hibernate的映射关系,每一次都会有新的收获,总是感觉自己还是不会hibernate。单从配置上说:知其然不知其所以然,马上就要找工作的人了,很是为自己担心呀!! 众所周知&#xff0c…

iOS内存管理(ARC,MRC)

iOS内存管理方式: ARC Automatic Reference Counting 自动引用计数 MRC Manual Reference Counting 手动引用计数 更改管理方式: 内存管理的问题: 1、内存泄露:不再需要的对象没有释放。 2、野指针:正在使用的对象提前…

height:auto 火狐没边框

css高度设置为auto后,设置的边框 ie正常 火狐 就没有边框了,解决方法 之前是这样写的 #right_bottom { width: 790px; height:auto; border: #EBEBEB 1px solid; } 最后添加了一个overflow: hidden;属性ok了,ie火狐都可以显示边框 即: #right_bottom {…

mysql装完后navicat无法连接_重装mysql后导致Navicat连接失败

今天重装了mysql数据库,然后再使用navicat去连接数据库的时候,一直报错 1251 Client does not support authentication protocol requested by server解决方法:1、cmd登录mysql2、修改Navicat中连接数据库的密码3、刷新mysql的系统权限表flus…