MySQL的索引类型及简单优化
2019独角兽企业重金招聘Python工程师标准>>>
普通索引:index,单字段/多字段,可存在多个,列值or组合列值无限制
唯一索引:unique index,单字段/多字段,可存在多个,列值or组合列值不可重复,但可以为NULL的重复,因为NULL值的记录不会被添加到索引.....
主键索引:primary key,单字段/多字段,唯一性,列值or组合列值不可重复
组合索引:当普通/唯一/主键为多字段时,即为追寻左前缀匹配的组合索引,其他限制根据各自特性自行理解
InnoDB要5.6以上才可支持
全文索引:fulltext index,单字段/多字段,可存在多个,列值or组合列值无限制,但列属性必须为char,varchar,text类型,查询使用 where match(column_name) against('keywords')
普通索引
添加索引
CREATE INDEX index_name ON tableName(`column_name`);
//可限定索引列长:`username` varchar(25)可设定索引长度为indexName(`username`(10));
CREATE INDEX index_name ON tableName(`column_name`(10));
添加索引
ALTER TABLE tableName ADD INDEX indexName(`column_name`);
//可限定索引列长:`username` varchar(25)可设定索引长度为indexName(`username`(10));
ALTER TABLE tableName ADD INDEX indexName(`column_name`(10));
删除索引
DROP INDEX indexName ON tableName;
ALTER TABLE tableName DROP INDEX indexName;
唯一索引
作为此索引的列不允许有重复的列值
注意:单字段则字段值不可重复,空字符串也不可以,但可以为NULL
多字段组合模式则组合的值不可重复,但可以为NULL的组合
CREATE UNIQUE INDEX indexName ON tableName(`column_name`);
//可限定索引列长:`username` varchar(25)可设定索引长度为indexName(`username`(10));
CREATE UNIQUE INDEX indexName ON tableName(`column_name`(10));
ALTER UNIQUE TABLE tableName ADD INDEX indexName(`column_name`);
//可限定索引列长:`username` varchar(25)可设定索引长度为indexName(`username`(10));
ALTER UNIQUE TABLE tableName ADD INDEX indexName(`column_name`(10));
删除索引
DROP INDEX indexName ON tableName;
ALTER TABLE tableName DROP INDEX indexName;
主键索引
主键索引具有唯一性(注意,此唯一性是说整个表的primary key只能存在一个,但primary key 可以为多字段型),其他的普通索引 唯一索引 组合索引可以存在多个相同类型的索引
注意:单列值或组合列值不可重复,且不可以为NULL
ALTER TABLE tableName ADD PRIMARY KEY('column_name');
//多字段主键索引
ALTER TABLE tableName ADD PRIMARY KEY('column_name_1', 'column_name_2');
删除主键索引时要确保此键不为自增类型(auto_increment)
ALTER TABLE tableName DROP PRIMARY KEY;
组合索引
组合索引为多个字段共同建立,追寻作左前缀模式:
indexName(name, sex, age)
可以使用
where name = 'name'
where name = 'name' and sex = 'f'
where name = 'name' and sex = 'f' and age >= 25
不可以使用
where sex = 'f'
where age >= 25
where sex = 'f' and age >= 25
最左前缀模式 like操作仅在 like 'xxxx%'模式下有效,'_xxx%', '%xxxx%'无效
CREATE INDEX index_name ON tableName(`column_name_1`, `column_name_2`, `column_name_3`);
//可限定索引列长:`username` varchar(25)可设定索引长度为index_name(`username`(10));
CREATE INDEX index_name ON tableName(`column_name_1`(10), `column_name_2`, `column_name_3`);
ALTER TABLE tableName ADD INDEX indexName(`column_name_1`, `column_name_2`, `column_name_3);
//可限定索引列长:`username` varchar(25)可设定索引长度为index_name(`username`(10));
ALTER TABLE tableName ADD INDEX indexName(`column_name_1`(10), `column_name_2`, `column_name_3);
DROP INDEX index_name ON tableName;
ALTER TABLE tableName DROP INDEX indexName;
全文索引
全文索引适用于MyISAM引擎,且只能为char varchar text类型的列添加 查询时使用where match(`column name`) against("keywords" in boolean mode)
添加索引
CREATE FULLTEXT INDEX indexName ON tableName(`columnName`[(length)]);
ALTER TABLE tableName ADD FULLTEXT INDEX indexName(`columnName`[(length)]);
全文索引 like查询无法使用
select `id` from tableName where match(`content`) against("keywords" in boolean mode);
删除索引
DROP INDEX indexName ON tableName;
ALTER TABLE tableName DROP INDEX indexName;
索引优化
1、索引支持 < <= = => > between in 不支持 not in <>【索引是有序的,对于范围类的查询有效,对于非范围的只能遍历整张表,not in <>不到最后一条记录是没办法确认查询是否完成】
2、索引不会包含有NULL值的列
3、使用like操作时只有在第一位不为通配符时索引才会启动
4、使用短索引,varchar(50)则视情况而定取前几位即可
5、不要在列值上计算,where year(addtime) < 2015 优化为 where addtime < 2015-01-01
可以使用explain命令来查看mysql是如何执行sql语句的,看自己的某些索引是否起了作用
转载于:https://my.oschina.net/sallency/blog/464070
MySQL的索引类型及简单优化相关推荐
- MYSQL数据库四种索引类型的简单使用
MYSQL数据库索引类型包括普通索引,唯一索引,主键索引与组合索引,这里对这些索引的做一些简单描述: (1)普通索引 这是最基本的MySQL数据库索引,它没有任何限制.它有以下几种创建方式: 创建索引 ...
- mysql 前索引_MySQL查询性能优化前,必须先掌握MySQL索引理论
数据库索引在平时的工作是必备的,怎么建好索引,怎么使用索引,可以提高数据的查询效率.而且在面试过程,数据库的索引也是必问的知识点,比如: 索引底层结构选型,那为什么选择B+树? 不同存储引擎的索引的体 ...
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
一.MySQL索引类型 MySql常见索引类型有:主键索引.唯一索引.普通索引.全文索引.组合索引 PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PR ...
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?...
一.介绍一下索引的类型 Mysql常见索引有:主键索引.唯一索引.普通索引.全文索引.组合索引 PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMA ...
- mysql 走索引 很慢_MySQL优化:为什么SQL走索引还那么慢?
背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 core 分析过程 接手这个问题时现场已经不在了,信息有限,所以我们先从 ...
- 【MySQL】索引的使用和优化
转载自:mysql索引的使用和优化 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车.对于没有索引的表,单表查 ...
- mysql的索引类型以及优缺点
一.索引 索引被用来快速找出在一个列上用一特定值的行.没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行. 数据表越大,花费时间越多.如果表对于查询的列有一个索引,MyS ...
- mysql优化的几种方法_详解mysql数据库不同类型sql语句优化方法
概述 分享一下之前笔记记录的一些不同类型sql语句优化方法,针对mysql. 主要分成优化INSERT语句.优化ORDER BY语句.优化GROUP BY 语句.优化嵌套查询.优化OR语句这几个方面, ...
- jqgrid 加载mysql数据_利用jqgrid+加mysql的text类型实现简单自定义数据模型
有的时候,我们做东西可能速度和安全在前期并不是我们考虑的重点,数据的灵活性可能对于一个不成熟的系统更加重要,这里我使用thinkphp+mysql+jqgrid做了一个简单的自定义数据模型.简单总结一 ...
最新文章
- Asp.net core 启动流程
- AI正在如何重塑生活和消费?头部企业齐聚,邀你共谈智能产业新机会
- oracle查询结果存入临时表,Oracle查询问题引发临时表使用
- centos 6.5装mysql 5.7,centos 6.5装mysql5.7
- Docker删除某个容器时失败解决方案
- 【XMPP】XMPP协议之原理篇
- CentOS 7 安装VirtualBox
- 杭电1799循环多少次?
- php将权限写入session,PHP由session文件夹权限不够引起的报错
- 惠普打印机故障代码_HP激光打印机常见故障代码
- XP母盘制作详细教程(完全版)(转)
- python统计套利_基于python的统计套利实战(二)之协整检验
- Linux卸载驱动方法
- fprom预测结果内容_启动子分析预测数据库
- python游戏计分代码_Python笔试题之设计“跳一跳”小游戏计分器
- 双系统正确卸载Ubuntu系统
- POJ1759Garland题解
- OneZero第二周第三次站立会议(2016.3.30)
- FME 2011预览:新特性 IFMEWorkspaceRunner
- 音视频开发:直播推流技术指南