mysql创建索引

哈希索引和Btree索引的比较

…衆ロ難τιáo~ 提交于 2019-11-30 11:24:08
索引是帮助mysql获取数据的数据结构。最常见的索引是Btree索引和Hash索引。 不同的引擎对于索引有不同的支持:Innodb和MyISAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。 我们在mysql中常用两种索引算法BTree和Hash,两种算法检索方式不一样,对查询的作用也不一样。 一、BTree BTree索引是最常用的mysql数据库索引算法,因为它不仅可以被用在=,>,>=,<,<=和between这些比较操作符上,而且还可以用于like操作符,只要它的查询条件是一个不以通配符开头的常量,例如: select * from user where name like ‘jack%’; select * from user where name like ‘jac%k%’; 如果一通配符开头,或者没有使用常量,则不会使用索引,例如: select * from user where name like ‘%jack’; select * from user where name like simply_name; 二、Hash Hash索引只能用于对等比较,例如=,<=>(相当于=)操作符。由于是一次定位数据,不像BTree索引需要从根节点到枝节点,最后才能访问到页节点这样多次IO访问,所以检索效率远高于BTree索引。

MySQL入门

ε祈祈猫儿з 提交于 2019-11-30 09:51:12
MySQL四层分层:(自上往下执行) 连接层:提供预客户端连接的服务。 服务层: 1.提供各种用户使用的接口 2.提供各种sql优化器(mysql如果发现你自己的sql写的太烂,会自动帮你优化) 引擎层: INNODB:事务优先 ( 适合高并发操作,使用的是行锁) MYISAM: 性能有限 (使用的是表锁) 存储层: 存储数据 查询数据库的引擎: SHOW VARIABLES LIKE '%storage_engine%' 查询数据库支持的引擎 : SHOW engines 为什么要SQL优化原因: 性能低,执行事件太长,等待时间太长,sql语句欠佳(连接查询),索引失效,服务器参数设置不合理 一般SQL编写过程 select ... distinct ... from ... join on ... where ... group by ... having ... order SQL的解析过程 from ... on ... join ... where ... group by ... having ... select ... distinct ... order sql如何进行优化,主要是索引的 优化 索引: 相当于书的目录(排好序,加快速度) 索引: index是帮助mysql高效获取数据的数据结构。索引是数据结构(b+) 索引的弊端: 1.索引本身很大,可以存放内存

MySQL—05—MySQL如何处理SQL语句;MySQL数据库存储引擎介绍;

孤街浪徒 提交于 2019-11-30 09:40:30
一、 MySQL 中的执行计划 1 MySQL 执行计划 在 MySQL 中可以通过 explain 关键字模拟优化器,执行 SQL 语句,从而知道 MySQL 是 如何处理 SQL 语句的。 2 MySQL 整个查询执行过程 • 客户端向 MySQL 服务器发送一条查询请求 • 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段 • 服务器进行 SQL 解析、预处理、再由优化器生成对应的执行计划 • MySQL 根据执行计划,调用存储引擎的 API 来执行查询 • 将结果返回给客户端,同时缓存查询结果 3 启动执行计划 EXPLAIN SELECT 投影列 FROM 表名 WHERE 条件 4 EXPLAIN 列的解释 4.1ID 查询执行顺序: id 值相同时表示从上向下执行 id 值相同被视为一组 如果是子查询,id 值会递增,id 值越高,优先级越高 4.2select_type simple: 表示查询中不包含子查询或者 union primary: 当查询中包含任何复杂的子部分,最外层的查询被标记成 primary derived: 在 from 的列表中包含的子查询被标记成 derived subquery: 在 select 或 where 列表中包含了子查询,则子查询被标记成 subquery union: 两个 select

MySQL—04—MySQL的其他对象

不问归期 提交于 2019-11-30 07:14:57
一、 MySQL 中的其他对象 1. 索引 MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度。 1.1MySQL 中的索引类型 • 普通索引 • 唯一索引 • 主键索引 • 组合索引 • 全文索引 1.2 普通索引 是最基本的索引,它没有任何限制。 在创建索引时,可以指定索引长度。length 为可选参数,表示索引的长度,只有字符串 类型的字段才能指定索引长度,如果是 BLOB 和 TEXT 类型,必须指定 length。 创建索引时需要注意: 如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数。 查询索引:SHOW INDEX FROM table_name 1.2.1 直接创建索引 CREATE INDEX index_name ON table(column(length)) 示例 为 emp3 表中的 name 创建一个索引,索引名为 emp3_name_index create index emp3_name_index ON emp3(name) 1.2.2 修改表添加索引 ALTER TABLE table_name ADD INDEX index_name (column(length)) 示例 修改 emp3 表,为 addrees 列添加索引,索引名为 emp3_address

SQL优化案例一

十年热恋 提交于 2019-11-30 06:29:55
有一次开发同时问我,为什么下面这条语句运行这么慢,希望我能够给一下解决的办法。语句是这样的: select ftime , memberid, objkind, createtime, workprovince, workcity, home_area, home_cityname2, regip_area, regip_city, regip, ip_country, ip_area, ip_city, loginip, verifystatus, platform from f_zhenai_dish_ip_d where ftime >= '20190918' and ftime <= '20190919' group by ftime, memberid order by ftime desc limit 50 offset 0; 首先肯定是看一下执行计划 +----+-------------+--------------------+------------+-------+--------------------------------+-------------+---------+------+----------+----------+--------------------------------------------------------+ | id |

mysql --索引

社会主义新天地 提交于 2019-11-30 05:52:31
优点: (1)通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性 (2)大大提高了检索数据的效率,减少表的检索行数 缺点: (1)在创建索引和维护索引的时候会耗费时间,随着数据量的增加时间复杂度增加 (2)索引文件会占用物理内存 (3)当对表的数据进行增删改的时候,所以也要动态的维护,这样就会降低数据的而维护速度 分类:单列索引,组合索引 单列索引 (1)一个索引只包含一个列 (2)可以存在多个单列索引 (3)单列索引分为:主键索引,唯一索引,普通索引 组合索引 一个组合可以包含两个或者两个以上的列 创建一个普通索引 方式一 create index 索引名 on 表名(字段名) 方式二 alter table 表名 add index 索引名(字段名) 创建唯一索引,与普通索引类似,必须唯一,可以存在空值 方式一 create unique index 索引名 on 表名(字段名) 方式二 alter table 表名 add unique(字段名)    创建主键索引,必须唯一,不可以存在空值  方式一 创建表的时候添加 方式二 alter table 表名 add primary key(字段名)    来源: https://www.cnblogs.com/ivyharding/p/11564769.html

MySQL中的KEY, PRIMARY KEY, UNIQUE KEY , INDEX 的区别

流过昼夜 提交于 2019-11-30 04:26:57
-----------转载-----------------------:原文: https://www.cnblogs.com/zjfjava/p/6922494.html 索引: 被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。 表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。 如果一个表有1000行,这比顺序读取至少快100倍。注意你需要存取几乎所有1000行,它较快的顺序读取,因为此时我们避免磁盘寻道。 所有的MySQL 索引 (PRIMARY、UNIQUE和INDEX) 在B树中存储 。字符串是自动地压缩前缀和结尾空间。 索引用于: 快速找出匹配一个WHERE子句的行; 当执行联结时,从其他表检索行; 对特定的索引列找出MAX()或MIN()值; 如果排序或分组在一个可用键的最左面前缀上进行(例如,ORDER BY key_part_1,key_part_2),排序或分组一个表。 如果所有键值部分跟随DESC,键以倒序被读取。 在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。 如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。 PRIMARY KEY: mysql

mysql 优化

。_饼干妹妹 提交于 2019-11-30 04:17:54
id select 查询的序列号,包含一组可以重复的数字,表示查询中执行sql语句的顺序。一般有三种情况: 第一种:id全部相同,sql的执行顺序是由上至下; 第二种:id全部不同,sql的执行顺序是根据id大的优先执行; 第三种:id既存在相同,又存在不同的。先根据id大的优先执行,再根据相同id从上至下的执行。 select_type select 查询的类型,主要是用于区别普通查询,联合查询,嵌套的复杂查询 simple :简单的select 查询,查询中不包含子查询或者union primary :查询中若包含任何复杂的子查询,最外层查询则被标记为primary subquery :在select或where 列表中包含了子查询 derived :在from列表中包含的子查询被标记为derived(衍生)MySQL会递归执行这些子查询,把结果放在临时表里。 union :若第二个select出现在union之后,则被标记为union,若union包含在from子句的子查询中,外层select将被标记为:derived union result :从union表获取结果的select partitions 表所使用的分区,如果要统计十年公司订单的金额,可以把数据分为十个区,每一年代表一个区。这样可以大大的提高查询效率。 type 这是一个非常重要的参数,连接类型,常见的有

慢查日志

和自甴很熟 提交于 2019-11-30 03:22:36
mysql 优化 【 5xx 服务器内部】 避免页面错误 由于数据库连接 timeout 连接超时 由于慢查询造成页面错误无法加载 由于数据无法提交 数据库的优化 硬件设备 贵 - 》低 系统配置 CPU 数据库表结构优化 sql 即索引的优化 低 --- 》高 优化 优化硬件 IO 系统配置的 cpu 数据表结构 Sql 语句及索引 查看 mysql 的版本 select @@version; 慢查日志 慢查询日志设置 当语句执行时间较长时,通过日志的方式进行记录,这种方式就是慢查询的日志。 1 、临时开启慢查询日志(如果需要长时间开启,则需要更改 mysql 配置文件,第 6 点有介绍) set global slow_query_log = on; 注:如果想关闭慢查询日志,只需要执行 set global slow_query_log = off; 即可 2 、临时设置慢查询时间临界点 查询时间高于这个临界点的都会被记录到慢查询日志中(如果需要长时间开启,则需要更改 mysql 配置文件)。 set long_query_time = 1; 现在起,所有执行时间超过 1 秒的 sql 都将被记录到慢查询文件中(我这里就是 /data/mysql/mysql-slow.log )。 3 、设置路径 set global slow_query_log_file='D:\

『浅入浅出』MySQL 和 InnoDB

不想你离开。 提交于 2019-11-30 03:16:13
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。传送门: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL、PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的、不了解数据库的有所帮助。 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出。 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是 数据库 和 实例 : 数据库:物理操作文件系统或其他形式文件类型的集合; 实例:MySQL 数据库由后台线程以及一个共享内存区组成; 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍。