MyISAM

索引与优化

≡放荡痞女 提交于 2020-02-02 02:02:19
参考: http://blog.csdn.net/xluren/article/details/32746183 http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引。 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条数据,平均每条数据源都重复大概10万次,表结构比较简单,仅包含一个自增ID,一个char类型,一个text类型和一个int类型,单表2G大小,使用MyIASM引擎。开始测试未添加任何索引。 执行下面的SQL语句: 1 mysql> SELECT id,FROM_UNIXTIME( time ) FROM article WHERE a.title= '测试标题' 查询需要的时间非常恐怖的,如果加上联合查询和其他一些约束条件,数据库会疯狂的消耗内存

[Mysql] 索引详解

此生再无相见时 提交于 2020-02-01 10:05:09
前言: 今天在这里总结一下Mysql索引,也给自己加个印象。 我的座右铭:即使记性再差,仍要坚持多读多看。 概念 Mysql索引的建立对于Mysql的高效运行是很重要的,索引可以大大提高Mysql的检索速度。 Mysql目前主要有以下5中索引类型: 普通索引 唯一索引 主键索引 组合索引 全文索引 缺点: 索引也有它的缺点,过多的滥用索引,也会降低更新表的速度。如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。 5种索引类型 普通索引 这是最基本的索引,他没有任何限制。可以用如下方式创建: 直接创建索引 create index index_name on table ( column ( length ) ) 修改表结构的方式添加索引: alter table table_name add index index_name on ( column ( length ) ) 创建表的时候同时创建索引 CREATE TABLE ` table ` ( ` id ` int ( 11 ) NOT NULL AUTO_INCREMENT , ` title ` char ( 255 ) CHARACTER NOT NULL , ` content ` text CHARACTER NULL

MySQL存储引擎

ぐ巨炮叔叔 提交于 2020-01-31 04:45:50
MySQL存储引擎 存储引擎 MySQL存储引擎 存储引擎   MySQL数据库在实际的工作中分为了语句分析层和存储引擎层,其中语句分析层主要负责与客户端完成连接并且事先分析出SQL语句的内容和功能,存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操作,即如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 MySQL存储引擎 (1)MyISAM存储引擎   不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本上可以用这个引擎来创建表。支持3种不同的存储格式,分别是:静态表、动态表、压缩表 静态表:表中的字段都是非变长字段,每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格) 动态表:记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk -r命令来改善性能 压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支 (2)InnoDB存储引擎   该存储引擎提供了具有提交

MySQL引擎

我与影子孤独终老i 提交于 2020-01-30 07:40:13
MySQL数 据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。如果技术高超,还可以使用MySQL++ API自己做一个引擎。下面介绍几种数据库引擎: ISAM :ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此, ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源 。 ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错 :如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。 MyISAM :MyISAM是MySQL的ISAM扩展格式和缺省的数据库引擎。 除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间 。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的

数据库存储引擎innodb与myisam

怎甘沉沦 提交于 2020-01-30 07:22:40
一、innodb与myisam的区别与取舍、innodb引擎的4大特性 如下是两者的索引图: 两者的 相同点 :两者都是mysql的常用引擎;两者的索引都是B+树 两者的 区别 : 事务:InnoDB支持,MyISAM不支持 外键:InnoDB支持,MyISAM不支持 索引类型:InnoDB是聚簇索引(叶子节点存数据),MyISAM是非聚簇索引(叶子节点存指针) 插入速度:MyISAM批量插入速度快 查询行数:MyISAM的查询性能会比InnoDB强,InnoDB查询表行数要全表扫描,MyISAM存在变量中直接读取 内存空间使用率:InnoDB比MyISAM高 全文索引:MyISAM支持。Innodb不支持,5.7以后才支持 压缩查询:MyISAM表格可以被压缩后进行查询操作 锁级别:InnoDB支持表级锁+(默认)行级锁,而MyISAM支持表级锁 主键:InnoDB必须有,MyISAM可没有 存储文件:Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI PS1:InnoDB的 行锁是实现在索引上 的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。 举个例子:t_user(uid, uname, age, sex) innodb; uid PrimaryKey,无其他索引 update t_user set age

170309、MySQL存储引擎MyISAM与InnoDB区别总结整理

谁都会走 提交于 2020-01-30 07:10:16
1、MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎的主要特点 MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得力不从心; 以下是MySQL 5.7 MyISAM存储引擎的版本特性: InnoDB存储引擎的特点是:行级锁、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTEXT类型的索引)。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB是为处理巨大量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。 以下是MySQL 5.7 InnoDB存储引擎的版本特性: 注意: InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如 update table set num=1 where name like “a%” 。 两种类型最主要的差别就是InnoDB支持事务处理与外键和行级锁。而MyISAM不支持

mysql innodb存储引擎和myisam引擎

喜欢而已 提交于 2020-01-30 07:09:35
InnoDb存储引擎面向在线事务处理,其特点是行锁设计、支持外键、并支持Oricle似得非锁定读(所谓非锁定读是如果数据库实例读取的行正在进行更新或删除操作当前读取不会等待当前锁的释放而是读取当前行的快照)InnoDb引擎的表保存在以ibd的文件中,innodb通过使用多版本并发控制来获得高并发性,Innodb采用了聚集的方式即每张表的存储都按主键的顺序存放,如果没有显示的指定主键Innodb存储引擎会为每一行生成一个6字节的rowid并以此作为主键 Myisam存储引擎不支持事务,表锁,支持全文索引 myisam存储引擎的数据表有myd和myi组成myd用来存放数据,myi用来存放索引文件 来源: https://www.cnblogs.com/paulversion/p/5535657.html

Mysql优化

帅比萌擦擦* 提交于 2020-01-28 04:42:12
一、Mysql的逻辑架构 二、存储引擎 Mysql5.5之前,默认存储引擎是MyISAM,5.5之后默认存储引擎变成 InnoDB 。 MyISAM和InnoDB的区别: 1)MyISAM不支持事务、InnoDB支持事务 2)MyISAM只有表锁、InnoDB引入了行锁 3)MyISAM支持全文索引、InnoDB 5.5不支持,5.6以后支持 4)MyISAM的读写速度会优于InnoDB 三、MySQL优化(SQL优化) · 数据类型的优化(创建表的时候,选择合适的数据类型) · 索引优化(SQL优化成本最低并且最有效果的优化方式) · 查询优化(SQL自带的检测工具、SQL结构) · 库表结构优化(分库分表、读写分离) · 硬件优化(cpu、固态硬盘、内存) · 参数优化(系统运行参数)- DBA 四、数据类型的优化 数据类型的选择原则: · 选择最小的数据类型,同时需要保证能够放下所存储的数据 · 选择最合适的数据类型,比如使用int表示年龄,而是不是varchar表示年龄 · 尽量让需要添加索引的列为not null 五、索引优化 什么是索引? 索引是一本书的目录,可以快速找到相应的内容。 索引是一个帮助我们快速查询内容的 数据结构 。   无索引的查询方式: 有索引的查询方式: 索引失效: 当写了一个索引后,开发者认为执行的sql会用上该索引

MySQL数据库优化

好久不见. 提交于 2020-01-26 19:35:02
一、MySQL 会遇到的问题:   1、 高并发的读写效率低问题 ---- 解决方案:集群,分布式。   2、 海量数据的读写效率低问题 ----- 解决方案:分表,分库。   3、 高可用和高扩展 ---- 解决方案:动态扩展服务器、防止单点故障、容灾。 二、关系型数据库优化:(原则: 先单机,后多机。 )   2.1 单机 优化方案 :     1.慢SQL的定义--> 分析慢SQL -- 解决慢SQL。         2. 表的设计、索引、引擎的优化。   3. 分表(垂直分表、水平分表)、分区、分库 的优化。    4. 缓存做集群。     5.SQL语句优化      2.2 多机优化方案 (分为多个数据库):     1. 读写分离(要保证 主从同步 ):        28 原则:如果有10个数据库,则 2 个专门做增删改的数据库, 8 个专门做查询的数据库。     2. 缓存做集群 三、定位慢SQL     3.1 查看数据库状态:     3.1.1 查看运行时间: show status like ‘uptime’;     3.1.2 CRUD 执行次数:       Show status like ‘Com_%’;       Show status like ‘Com_update%’       Show status like ‘Com

MySQL 常见的两种存储引擎

纵然是瞬间 提交于 2020-01-26 14:26:46
  MySQL两种常见的存储引擎有:MyISAM 和 InnoDB,两者区别如下: 1、count运算:MyISAM 有缓存表的 meta-data 元数据,元数据包括行数等,因此其做 COUNT(*) 查询时不需要消耗多少资源。而 InnoDB 就没有这个缓存。 2、事务和崩溃后的安全恢复:MyISAM强调的是性能,每次查询具备原子性,执行速度比 InnoDB 更快,但是 MyISAM 不提供事务的支持。而 InnoDB 支持事务、外部键等高级数据库功能。具有事务提交(commit)、回滚(rollback)和崩溃修复(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。 3、支持外键:InnoDB支持,MyISAM 不支持。   MyISAM更适合读密集的表,而InnoDB更适合写密集的的表。 在数据库做主从分离的情况下,经常选择MyISAM作为主库的存储引擎。 一般来说,如果需要事务支持,并且有较高的并发读取频率(MyISAM的表锁的粒度太大,所以当该表写并发量较高时,要等待的查询就会很多了),InnoDB是不错的选择。如果你的数据量很大(MyISAM支持压缩特性可以减少磁盘的空间占用),而且不需要支持事务时,MyISAM是最好的选择。 来源: https://www.cnblogs