一、索引的概念
利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部份),建立与记录位置的对应关系,就是索引。索引的关键字一定是排序的。二、索引的类型
mysql支持四种索引:
1、主键索引
2、唯一索引
3、普通索引
4、全文索引无论任何形式的索引,都是通过建立关键字与位置的对应关系来实现的。
差异:对索引关键字的要求不同。
关键字:记录部分数据(某个字段,某些字段,某个字段的一部份)普通索引(index):对关键字没有要求
唯一索引(unique index):要求关键字不能重复,同时增加唯一约束。
主键索引(primary key):要求关键字不能重复,同时不能为NULL。
全文索引(fulltext key):关键字的来源不是所有字段的数据,而是从字段中提取的特别关键字。*如果一个索引通过在多个字段上提取的关键字,称之为复合索引。三、索引的语法
创建:
1、创建表时创建索引
create table student (id int unsigned not null auto_increment,name varchar(32) not null default '',nickname varchar(32) not null default '',sn char(12) not null default '',desc text,primary key (`id`), --主键索引unique index `ui_sn` (`sn`), --唯一索引index `name_nickname` (`name`,`nickname`), --复合索引fulltext index `fi_desc` (`desc`) --全文索引
)engine=myisam charset=utf8;
索引可以起名字,主键索引不能起名字,一个表只能有一个主键索引,其它索引可以有多个。名字可以省略,mysql自动生成。2、更新表结构时创建索引
alter table student add primary key (`id`);
alter table student add unique index `ui_sn` (`sn`);
alter table student add index `name_nickname` (`name`,`nickname`);
alter table student add fulltext index `fi_desc` ('desc');
*如果表中存在数据,数据符合唯一或主键的约束才能创建成功。
*auto_increment属性,依赖于key。删除:
alter table student drop primary key;
alter table student drop index `ui_sn`;
alter table student drop index `name_nickname`;
alter table student drop index `fi_desc`;四、索引的使用
可以通过在select语句前使用explain,来获取该查询语句的执行计划。

1、索引的使用场景
索引检索:条件过滤
索引排序:如果order by排序需要的字段上存在索引,可能使用到索引。
索引覆盖:索引拥有的关键字内容,覆盖了查询所需要的全部数据,此时就不需要数据区获取数据,仅仅在索引区中。student表结构如下:

如果我们要查询name,nickname,和sn这三个字段:> select name,nickname,sn from student where name like 'a%';
通过分析我们可以在ename上建立索引来提高查询效率。> alter table student add index `i_name` (`name`);> explain select name,nickname,sn from student where name like 'a%'\G;

如上所示,查询确实用到了索引。
如果我们在name,nickname和sn上建立一个复合索引,结果会是怎么样?> alter table student add index `i_nns` (`name`,`nickname`,`sn`);

如上所示,只需要检索出索引中的所有数据即可。五、索引使用的原则
索引存在,没有满足使用原则,导致索引无效。
1、列独立,如需要某个字段上使用索引,则字段在参与的表达式中,保证字段独立在一侧。

如上所示,id+1=5 就不是独立列,所以没有使用索引。2、左原则
LIKE:所匹配的关键字必须在左边,如果通配符出现在左边将不能使用索引。

复合索引:仅仅针对左边字段有效果

3、OR的原则
必须要保证两端的条件都存在可以使用的索引,才能使用到索引。

4、mysql智能选择
即使满足了如上的原则,mysql也不一定会使用索引。
弃用索引的主要原因:查询即使使用索引,会导致出现大量的随机IO,相对于数据记录从第一条遍历到最后一条的顺序IO开销,还要大。

mysql优化概述2相关推荐

  1. mysql优化概述4

    一.分区1.分区概念 将某张表数据,分别存储到不同的区域中. 每个分区,都是独立的表,都要存储该分区的数据,索引信息.2.创建分区 创建表并指定分区的选项 create table 表名 (定义... ...

  2. 【一】MySql优化概述 + MySql架构与存储引擎

    衡量指标 Qps:Queries Per Second 每秒查询量,同时适用于InnoDB和MyISAM引擎 QUESTIONS/UPTIME Tps:Transactions Per Second ...

  3. mysql数据库优化韩顺平_韩顺平 Mysql数据库优化(一) 优化概述

    第 1 章Mysql优化概述 网站的瓶颈在web层(web吞吐量),程序对mysql的操作.我们前面讲的页面静态化技术和memcached技术目的减少对mysql访问,但是总是访问数据库,所以我们需要 ...

  4. 韩顺平 Mysql数据库优化(一) 优化概述

    第 1 章 Mysql优化概述 网站的瓶颈在web层(web吞吐量),程序对mysql的操作. 我们前面讲的页面静态化技术和memcached技术目的减少对mysql访问,但是总是访问数据库,所以我们 ...

  5. php数据库--mysql优化

    mysql优化概述: mysql优化概述方针:① 存储层:数据表"存储引擎"选取.字段类型选取.逆范式(3范式)② 设计层:索引.分区/分表.存储过程,sql语句的优化③ 架构层: ...

  6. 史上最详细的网站优化系列(一)mysql优化1

    一.mysql优化概述 方针: ① 存储层:数据表"存储引擎"选取.字段类型选取.逆范式(3范式) ② 设计层:索引.分区/分表.存储过程,sql语句的优化 ③ 架构层:分布式部署 ...

  7. MySQL 优化 —— SQL优化概述(优化专题开篇词)

    引言 最近为了研究索引的知识,特地去MySQL 官网研读了一番,发现MySQL官网有比较全面的MySQL优化方案和知识背景,所以希望通过一系列文章,将官网的知识翻译总结一下,避免日后去网上胡乱搜索产生 ...

  8. mysql编程_PHP数据库编程之一MySQL优化策略概述

    本文简单讲述了PHP数据库编程之MySQL优化策略.分享给大家供大家参考,具体如下: 前些天看到一篇文章说到PHP的瓶颈很多情况下不在PHP自身,而在于数据库.我们都知道,PHP开发中,数据的增删改查 ...

  9. mysql优化篇_MySQL优化篇-查询优化

    可以参考一下官方文档中的解释. 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. ...

最新文章

  1. 【数据结构】 线性表的顺序表
  2. python server.py_python manage.py runserver报错
  3. 如何处理错误消息Query XXX is invalid or contains errors
  4. 前端学习(2709):重读vue电商网站29之左侧菜单栏
  5. Java开发者必须掌握的15个框架
  6. 页面导航【WP7学习札记之七】
  7. 让你的AIR程序自动检测更新,并自动下载、更新到新版本。
  8. 等宽字体 Monospaced Font
  9. 中职计算机教学随笔800字,职高教育工作随笔
  10. smtplib 抄送邮件_Smtp发送及抄送邮件
  11. Wordpress出现503 Service Temporarily Unavailable
  12. jQuery插件库超级好用库
  13. 使用JavaScript使浏览器进入全屏或退出全屏
  14. A股-入门-新手该如何成功选股
  15. 50个有趣的休闲网站 (外国)
  16. 谷歌排名影响因素最新研究(SEM RUSH版)
  17. 电商交易规律、RFM分类
  18. Viper的使用方法
  19. 【源码】用主应力线(应力可视化)研究二维应力场
  20. P5.js码绘———拉普兰德做得到吗?

热门文章

  1. 用anaconda配置深度学习的环境,从配置环境到下载各种包,绝对学会,还是没学会留下评论,我看到会回答
  2. gatewayfilter详解_Spring Cloud Gateway 之 Filter
  3. javadoc解析成java 生成 api文档
  4. golang 遍历list_golang服务开发平滑升级之优雅重启
  5. linux 22 口令自动传马,近期用到的linux命令
  6. 使用Jenkins打包和部署Maven工程步骤详解
  7. oracle共享池的结构,Oracle 10g内存结构之共享池的相关知识及使用简介
  8. java fx 按钮长度_JavaFX按钮
  9. 巅峰抢购助手pc_豌豆荚、91助手宣布暂停部分服务!第三方应用商店为何式微?...
  10. 三线压力传感器原理_电喷摩托车进气压力传感器原理与检测