mysql 索引计划_Mysql索引、查询计划、优化方向

索引

Innodb索引(聚集索引)(聚簇表分布)

%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7_2016-10-15_%E4%B8%8A%E5%8D%8811.14.50.png

Innodb是索引组织表,其结构是B+Tree。其表索引结构是聚簇表分布。

其叶子节点保存了Key+Row Data(聚集索引,按主键排序),其Key是主键或非空的唯一索引。而其二级索引是非主键或者非空的唯一索引。即Innodb表会把主键作为聚集索引,如果没有主键,会选择非空的唯一索引作为聚集索引。如果非空的唯一索引也没有的情况下,Innodb表会默认生成一个6bytes的id,默认作为主键成为聚集索引。

在创建表的时候要自己指定一个没有业务含义的主键,便于快捷插入

默认6字节的数据,到达数据上限时,不会报错,而是会直接覆盖数据

Myisam索引(非聚集索引)(非聚簇表分布)

%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7_2016-10-15_%E4%B8%8A%E5%8D%8811.26.18.png

Myiasm不管是主键索引还是二级索引,永远存储的是Key,数据则单独在表中。即非聚集索引,查询的时候要先查询索引,然后查询数据。

Innodb优化方向和注意事项

创建索引

需要注意的是创建索引不是越多越好,要注意基数和选择性。

基数:

一列数据,只有True和False两个结果。则这一列的基数是2

选择性:

列唯一键与行数的比值,在0-1之间。他的取值越小越好。选择性的值是根据表中值的数据而不一样的。基数为2的情况下,就有2个选择性的结果。

计算方法:相同值的数据总量➗表中数据的总量

如果Mysql中经常查询的方法是使用此列中选择性小的数据进行筛选和取出,那么可以对此建立索引提高效率。反之,如果经常使用选择性比较高的数据进行筛选,则不适合对此列建立索引,而应先考虑业务上的查询优化。

优化

禁止使用select *

使用select * 会查询大量数据并读取,不利于使用索引覆盖技术。

字符串查询

字符串查询的时候最好不要在开头进行模糊查询,从开头进行模糊查询难以使用索引快捷查找。

创建表的时候要有业务无关的自增主键

如果不使用自增主键的时候,系统默认的主键会有覆盖数据而不警告的风险。

大批量导入数据

如果大批量插入数据的时候,最好先将数据导入,然后再创建索引,同时进行批量提交而非单条提交。

对排序字段创建索引

order by高频调用的字段,对齐创建索引有助于快速排序。

避免使用limit a,b

Limit a,b 会取出a+b条记录。所以应该尽量避免,而使用limit a,并排序后限制>id。

执行计划

explain SQL Command

Example:

mysql> explain select ID,post_author,post_date,post_title,post_status,post_name from wp_posts;

+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+

| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |

+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+

| 1 | SIMPLE | wp_posts | NULL | ALL | NULL | NULL | NULL | NULL | 56 | 100.00 | NULL |

+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------+

1 row in set, 1 warning (0.00 sec)

数据的查看方法

注意几点:

1. ID越大,优先级越高,越先被执行

2. ID相同,从上至下,按顺序执行

字段解释

ID

SQL语句的执行顺序

possible_keys

指出Mysql可以利用哪些索引在表中找到Row,如果查询的字段中存在索引,则会被列出在这个地方,如果没有的话就不会列出,如果有的话也并不代表会被使用。

key

Mysql实际在查询中使用到的索引,如果没有使用到索引,则不会被列出。

type

Mysql找到所需数据(Row)所使用的方式,称之为访问类型,按照查询的性能由差到好如下所示:

Type

Desc

ALL

Full Table Scan,Mysql会遍历整张表找到所需数据

index

Full Index Scan,Mysql只遍历索引树

range

索引范围扫描,Mysql对索引的扫描开始于某一点而非全部,常见于匹配值域(between,in, >, etc...)

ref

非唯一索引扫描,返回匹配某个单独值的所有数据。常见于使用非唯一索引即唯一索引的非唯一前缀进行的查找(=)

eq_ref

唯一索引扫描,即每个索引键只有一条记录与之匹配,常见于主键和唯一键

const,system

null

key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度

keylen显示的值为索引字段的最大可能长度,并非实际使用长度。即keylen是根据表定义计算而得,不是通过表内检索出的

rows

Mysql根据表统计信息和索引状况,估算的影响到的数据的行数

ref

表示表的连接匹配条件

Extra

显示比较重要的额外信息

Using Index

表示Mysql在操作中使用了覆盖索引(Covering Index)

覆盖索引

MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件。包含所有满足查询需要的数据的索引称为覆盖索引。

覆盖索引切不可使用select *,否则会造成索引文件过于庞大,导致查询性能下降。

Using Where

表示Mysql使用Where字句过滤结果

Using Temporary

表示Mysql需要使用临时表来存储结果,一般见于排序和分组中

Using Filesort

表示Mysql无法利用索引完成排序,需要使用文件排序。

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

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

相关文章

[复习]莫比乌斯反演,杜教筛,min_25筛

[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式:\[\begin{aligned}g(n)&\sum_{n|d}f(d)\\f(n)&\sum_{n|d}\mu(\frac{d}{n})g(d)\end{aligned}\] 实际上还有\[\begin{aligned}g(n)&\sum_{d|n}f(d)\\f(n)&\sum_{d|n}\mu(\fra…

玩转oracle 11g(26):误删表数据和误删表回滚

14.误删除表中数据并提交(deletecommit) select * from med_dept_dict as of timestamp sysdate - 1/1440 描述:其中med_dept_dict 为误删除数据的表 sysdate - 10/1440 表示查询10分钟之前数据 注意:数据来源是查询undo中的撤…

mysql kingshard 扩容_如何用Go打造一个高性能mysql proxy

kingshard架构设计和功能实现kingshard(https://github.com/flike/kingshard)开源有一段时间了,有些热心的用户发邮件来咨询kingshard的设计和实现问题。于是周末抽空写了一篇介绍kingshard架构和功能实现的文章,希望通过本文能够让用户对kingshard有更深…

玩转oracle 11g(27):ora-12154和客户端版本低

16. 64bit windows操作系统上 安装了32bit的oracle alert log 里不断的出现如下错误: OER 7451 in Load Indicator : Error Code OSD-04500: illegal option specified O/S-Error: (OS 1) 函数不正确。! 每10秒出现一次错误提示。 解决方案: 重新安装or…

mysql 命令行 主从复制_MySQL 的主从复制(高级篇)

首先要明白为什么要用 mysql 的主从复制:1–在从服务器可以执行查询工作 (即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)2–在从主服务器进行备份,避免备份期间影响主服务器服务;…

方法的重写

方法的重写 1、在子类中可以根据需要对从基类中继承的方法进行重写 2、重写方法必须和被重写方法具有相同对的方法名称,相同的参数列表和返回值类型 3、重写方法不能使用比被重写方法更严格的访问权限 在方法重写的时候注意:对那个方法进行重写尽量copy那…

[Android]安装 Android Studio 第一行Android代码

安装 Android Studio 1.下载 官网 建议官网下载https://developer.android.com/index.html 网盘 链接:https://pan.baidu.com/s/1b8KyEMYbSYt9EQJ2e8Ge6w 提取码:ytn4 《第一行代码》第二版提供版本(2016年) 2.安装组件全…

玩转oracle 11g(28):ora-00064和程序异常终止

18.ORA-00064 object is too large to allocate on this OS 问题原因: 通过查看告警日志,确认修改的process过大 解决步骤: 使用 D:\oracle\product\10.2.0\admin\docare\pfile\init.ora 启动 操作步骤如下: sqlplus sys/docar…

使用with 创建视图

语法 : create view as with a as () , select * from a ;CREATE VIEW pms_work_hour_viewASWITH tAS (SELECT id,create_name AS name,project_number AS parent_id,(end_date - begin_date) AS times,ROUND ( (end_date - begin_date) / 3600000, 2) A…

android mysql sqlite_Android SQLite数据库基本操作方法

程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数据库来实现一…

[Linux]Ubuntu 以管理员权限打开文件夹

方法一:(亲测可用) 此操作适合于文件夹有小锁,在root文件夹下操作等。 ubuntu 以管理员权限打开文件夹: 1,右键->在终端打开 2, 在终端中直接输入sudo nautilus 3,想干嘛干嘛…

5G RedCap:轻量5G技术的新宠

嘿,大家好!今天我们将深入了解一项引领5G轻量化时代的关键技术——5G RedCap。这项技术可谓是5G发展中的一把新利器,让我们看看它是如何在5G世界中展露头角的。 5G RedCap是什么?轻量化5G技术的精髓 5G RedCap的全名是5G Reduced…

玩转oracle 11g(29):检查操作系统版本和查询表中修改数据

20.检查操作系统版本: 必须是5.1 or 5.2。 实际为 6.1未通过 解决方法: 修改参数文件oraparam.ini • [Certified Versions] • #You can customise error message shown for failure, provide value for CERTIFIED_VERSION_FAILURE_MESSAGE • Windows5.1,5.2…

集腋成裘-10-ECharts -未知-03

未完。待续 转载于:https://www.cnblogs.com/YK2012/p/10170396.html

python 元组遍历_Python中的for循环:元组、列表、字典的遍历和相互转化

Python for循环可以遍历任何序列的项目,如列表、字符串、元组、字典、集合等序列类型。语法:for循环的语法格式如下:for iterating_var in sequence:statements(s)流程图:animals"dog","cat","pig"…

玩转oracle 11g(30):ora-03135和plsql乱码问题

22. ORA-03135连接失去联系 如果应用程序时不时地报错“ORA-03135连接失去联系”, 该问题可能与sqlnet.ora设置参数SQLNET.EXPIRE_TIME 有关 在文件sqlnet.ora中,增加一行,单位分钟: SQLNET.EXPIRE_TIME = 10 23. Pls…

计算机论文搜索技巧【一】

如何搜素一个杂志里面的文章并下载?(以FSE为例) 1.在dblp搜索 FSE 点击相关链接 用google或 google scholar 跳转页面 2.找到类似 source Materials目录 点击查阅相关文档 找到相关信息 3.复制题目,结合dblp与 google scholar找到…

mysql5.6.25密码_安装压缩版mysql5.6.25/ 5.7.14

1 解压mysql压缩包,配置环境变量 新增环境变量MySQL,值为mysql的目录,最后面path后面添,加%MySQL%\bin; ----------------后面以 %MySQL% 代替MySQL的路径2 %MySQL%\my-default.ini文件,修改这个文件,添加base…

后台开发常用mysql语句_v1.0

目录 一、基本信息查看1. 表描述二、表操作1. 查看建表语句2.查看表3. 创建表4. 更新表5. 删除表6. 重命名表三、索引操作1. 查看索引2. 创建索引3. 修改索引4. 删除索引四、记录操作1. 查询记录2. 添加记录3. 更新记录4. 删除记录一、基本信息查看 1. 表描述 DESCRIBE table_n…

玩转oracle 11g(31):ora-04031

24. ORA-04031错误的解决办法 应用程序报错“ORA-04031错误” 原因分析: SGA 分配不足,32bit 最大的分配1.7G 解决方法: 增大sga 或操作系统和数据库版本升级到64bit