MyISAM

mysql(2):索引

假如想象 提交于 2020-01-26 00:08:10
索引基础 索引介绍 定义 索引是满足某种特定查找算法的数据结构。这些数据结构会以某种方式指向数据,从而实现高效查找。 优势 提高了查询速度 劣势 降低更新表的速度,因为更新表时,MySQL不仅要保存数据,还要保存索引文件。 建立索引会占用磁盘空间的索引文件。 索引分类 主键索引 根据主键pk_column(length)建立索引, 不允许重复,不允许空值 。 ALTER TABLE 'table_name' ADD PRIMARY KEY pk_index('col'); 唯一索引UNIQUE 用来建立索引的列的值必须是 唯一的,允许空值 。 ALTER TABLE 'table_name' ADD UNIQUE INDEX index_name('col'); 普通索引 用 普通列 构建的索引,没有任何限制。 ALTER TABLE 'table_name' ADD INDEX index_name('col'); 组合索引 用多个列组合构建的索引,这多个列中的值不允许有空值。 ALTER TABLE 'table_name' ADD INDEX index_name('col1','col2','col3'); 遵循“最左前缀”原则,把最常用作为检索或排序的列放在最左,依次递减,组合索引 相当于建立了col1,[col1,col2],[col1,col2,col3]三个索引

mysql的简介及体系结构

こ雲淡風輕ζ 提交于 2020-01-25 22:08:30
mysql的简介介绍 1、什么是mysql? mysql是一个开源的关系型数据库管理系统,现在是oracle公司旗下的一款产品,由C和C++语言编写,可移植性高。支持 在多种操作系统上安装,最常见有AIX,linux,window。mysql因为开源免费,所以受到了目前互联网行业的欢迎。 以mysql作为数据库,linux系统作为操作系统,apache或者nginx作为web服务器,perl/php/python作为服务端的脚 本解释器,就可以搭建起一个免费的网站。被业界称为LNMP或者LAMP 2、mysql体系结构 连接者 :不同语言的代码程序和mysql的交互(SQL交互) 1、 连接池 管理、缓冲用户的连接,线程处理等需要缓存的需求 2、 管理服务和工具组件 系统管理和控制工具,例如备份恢复、Mysql复制、集群等 3、 sql接口 接受用户的SQL命令,并且返回用户需要查询的结果 4、 查询解析器 SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构) 5、 查询优化器 SQL语句在查询之前会使用查询优化器对查询进行优化 select id,name from user where age = 40; a、这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行age过滤 b、这个select查询先根据id和name进行属性投影

mysql索引的使用

为君一笑 提交于 2020-01-25 18:11:24
什么是索引?为什么要建立索引?索引分类?索引的使用? 转载SQL(五) MySQL中的索引详讲 一、索引介绍:   索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大查询数据所花费的时间就越多。如果表中查询的列有索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。   例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。   如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为止。   如果有了索引,那么会将 Phone 字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。其中MySQL中的索引的存储类型有两种:BTREE、HASH。 也就是用树或者Hash值来存储该字段,更详细的查找逻辑就需要会算法的知识了。我们现在只需要知道索引的作用,功能是什么就行。 二、索引优缺点: 优点:   1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引。   2、大大加快数据的查询速度。 缺点:   1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。  

Why Index is used only when forced but not by default?

妖精的绣舞 提交于 2020-01-25 04:34:06
问题 I have around 420 million records in my table. There is an only index on column colC of user_table . Below query returns around 1.5 million records based on colC . But index is not used somehow and return the records 20 to 25 mins select colA ,ColB , count(*) as count from user_table where colC >='2019-09-01 00:00:00' and colC<'2019-09-30 23:59:59' and colA in ("some static value") and ColB in (17) group by colA ,ColB; But when I do force index, it starts getting used and returns the record

mysql性能优化

旧街凉风 提交于 2020-01-24 13:46:15
数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情 1.为查询缓存优化你的查询 mysql> show variables like '%query_cache%'; (query_cache_type 为 ON 表示已经开启) +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 20971520 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 如果不是ON,修改配置文件以开启查询缓存: > vi /etc/my.cnf [mysqld]中添加: query_cache_size = 20M #缓存的大小

MySQL两种存储引擎: MyISAM和InnoDB 简单总结

我是研究僧i 提交于 2020-01-21 00:16:47
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM(Indexed Sequential Access Method:有索引的顺序访问方法)所改良。虽然性能极佳,但却 有一个缺点:不支持事务处理(transaction) 。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参考完整性与并发违规处理机制,后来就逐渐取代MyISAM。 InnoDB,是MySQL的数据库引擎之一,为MySQL AB发布binary的标准之一。InnoDB由Innobase Oy公司所开发,2006年五月时由甲骨文公司并购。与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了ACID兼容的事务(Transaction)功能,类似于PostgreSQL。目前InnoDB采用双轨制授权,一是GPL授权,另一是专有软件授权。 MyISAM和InnoDB两者之间有着明显区别,简单梳理如下: 1) 事务支持 MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提交,这样会影响速度,所以最好是把多条SQL语句显示放在begin和commit之间,组成一个事务去提交。 MyISAM是非事务安全型的,而InnoDB是事务安全型的,默认开启自动提交,宜合并事务,一同提交

漫谈MySQL体系结构[转]

落爺英雄遲暮 提交于 2020-01-20 01:47:38
背景 了解MySQL的架构图,对MySQL有一个整体的把握,对于以后深入理解MySQL是有很大帮助的。比如:很多查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行。 MySQL从概念上分为四层,如下图: 这四层自顶向下分别是 网络连接层,服务层(核心层),存储引擎层,系统文件层 。 我们自顶向下开始讲解。 网络接入层 作用 主要负责 连接管理、授权认证、安全 等等。每个客户端连接都对应着服务器上的一个线程。服务器上维护了一个线程池,避免为每个连接都创建销毁一个线程。当客户端连接到MySQL服务器时,服务器对其进行认证。可以通过用户名与密码认证,也可以通过SSL证书进行认证。登录认证后,服务器还会验证客户端是否有执行某个查询的操作权限。这一层并不是MySQL所特有的技术。 为什么要设计成线程池? 在服务器内部,每个client都要有自己的线程。这个连接的查询都在一个单独的线程中执行。想象现实场景中数据库访问连接实在是太多了,如果每次连接都要创建一个线程,同时还要负责该线程的销毁。对于系统来说是多么大的消耗。由于线程是操作系统宝贵的资源。这时候线程池的出现就显得自然了,服务器缓存了线程,因此不需要为每个Client连接创建和销毁线程。 服务层 作用 第二层服务层是MySQL的核心,MySQL的核心服务层都在这一层, 查询解析,SQL执行计划分析

mysql基础篇-archive引擎

醉酒当歌 提交于 2020-01-19 20:03:01
1.archive 引擎特点 Archive引擎作用:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。 优点: 1. 可以压缩 :以zlib对表数据进行压缩,磁盘I/O更少,数据存储在ARZ为后缀的文件中。 2. 存储空间小 :Archive表比MyISAM表要小大约75%,比支持事务处理的InnoDB表小大约83%。 3. 插入数据性能好 :当表内的数据达到1.5GB这个量级,CPU又比较快的时候,Archive表的执行性能就会超越MyISAM表。因为这个时候,CPU会取代I/O子系统成为性能瓶颈。别忘了Archive表比其他任何类型的表执行的物理I/O操作都要少。 4. 数据迁移简单 :Archive表可以方便地移植到新的MySQL环境,你只需将保存Archive表的底层文件复制过去就可以了。 5. 支持行锁 :Archivec存储引擎使用行锁来实现高并发插入操作 6. 支持分区 :Archive存储引擎支持分区 缺点 1. 不支持索引 :archive引擎不支持索引。 2. 不支持更新 :archive引擎不支持更新,删除。 3. 不支持事务 :archive引擎不支持事务。 2. 存储 每个archive表在磁盘上存在两个文件:.frm(存储表定义).arz(存储数据) 往archive表插入的数据会经过压缩

mysql基础篇-引擎区别

孤人 提交于 2020-01-19 19:33:00
引擎是什么? MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 在文件系统中,MySQL将每个数据库(也可以称之为schema)保存为数据目录下的一个子目录。创建表时,MySQL会在数据库子目录下创建一个和表同名的.frm文件保存表的定义。例如创建一个名为 MyTable的表,MySQL会在MyTable.frm文件中保存该表的定义。 因为MySQL使用文件系统的目录和文件来保存数据库和表的定义,大小写敏感性和具体的平台密切相关。在Windows中,大小写是不敏感的;而在类Unix中则是敏感的。不同的存储引擎保存数据和索引的方式是不同的,但表的定义则是在MySQL服务层统一处理的。 查看引擎 show engines; Engine Support Comment Transactions XA Save point InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES MRG_MYISAM YES Collection of identical MyISAM tables NO

数据库相关面试题

╄→尐↘猪︶ㄣ 提交于 2020-01-19 19:26:05
1.数据库三范式是什么? ①第一范式(1NF):字段具有原子性,不可再分。(所有关系型数据库系统都满足第一范式数据库表中的字段都是单一属性的,不可再分) ②.第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。要求数据库表中的每个实例或行必须可以被惟一地区分。通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主关键字或主键。 ③.满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。 >所以第三范式具有如下特征: >>1. 每一列只有一个值 >>2. 每一行都能区分。 >>3. 每一个表都不包含其他表已经包含的非主关键字信息。 2.有哪些数据库优化方面的经验? ①. 用 PreparedStatement, 一般来说比 Statement 性能高:一个 sql发给服务器去执行,涉及步骤:语法检查、语义分析, 编译,缓存。 ②. 有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。 ③. 表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等 ④. UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用