InnoDB表建立索引注意:
InnoDB表是基于聚簇索引建立的,InnoDB的索引结构,非常不同于其他大多数MySQL存储引擎,因此,它只提供一种非常快速的主键查找性能。不过,它的辅助索引(Sencondary Index,也就是非主键索引)也会包含主键列,所以,如果主键定义的比较大,其他索引也将很大。如果想在表上定义很多索引,则争取尽量把主键定义得小一些。InnoDB不会压缩索引。
InnoDB还不能根据排序(sorting)建立索引,而MyISAM支持。因此,当InnoDB加载数据和创建索引时,要比MyISAM慢很多。任何改变InnoDB表结构的操作,会导致这个表的重建,包括重建所有索引。
查看表的属性:
show table status like '表名';
修改表的引擎语句:
alter table ‘表名’ engine='引擎名';
这种语法适合所有的存储引擎,不过这里有一个“陷阱”,这种转换过程会消耗大量时间。MySQL为此要执行一个旧表到新表的逐行复制(Row-By-Row Copy)。在这期间,转换操作可能会占用服务器的所有I/O处理能力,并且在转换时,源表要被读加锁(Read-Locked)。因此,在一个繁忙的表上做此操作,要加以注意。
建立数据库表要考虑的因素:
虽然有许多因素会影响存储引擎的选择,但通常可以归结为几个主要考虑因素。下面有一些要点是应该引起注意的。
1、事务
如果应用需要事务处理操作,那么InnoDB是稳定的、良好的、已被证明的一种恰当选择。
如果不需要事务处理,并且主要操作时处理一些select或insert查询,那么MyISAM是一个很好的选择。另外,有时应用的某个专用部分(例如日志记录)也适合选用MyISAM引擎。
2、并发
如何更好地满足并发需求,要依据应用的工作负载而定。如果只是需要并发的插入操作和读操作,MyISAM都是正确的选择。如果需要混合性的并发操作,并且操作之间要互不干扰,那么支持行级锁的引擎是更好的选择(例如InnoDB)。
3、备份
常规备份需求也会影响表的选择。如果服务器可以周期性地停机,来进行备份,那么各种引擎都能很容易地实现备份功能。但如果需要这样或那样的某种联机备份,那么选择可能就不简单了。另外,要记住,如果同时使用多种引擎,会使备份和服务器(性能)调整变得更加复杂。
4、崩溃后恢复
如果有大量的数据、应该慎重考虑,系统崩溃后需要花多长时间才能恢复。比如通常来说,MyISAM表比InnoDB表更容易出错,恢复所需的时间也更长。事实上,很多人并不需要事务处理,也选择了InnoDB引擎,就是基于这个重要的原因。
5、特有特性
操作人员可能会发现应用程序依赖于只有某些存储引擎才能提供的特殊性或优化手段。例如,很多应用都依赖于聚集索引优化。在这种情况下,只有InnoDB和solidDB可以选择。另一方面,在MySQL中,也只有MyISAM支持全文检索。如果某个存储引擎可以满足应用的一个或若干重要需求,但又不支持别的需求时,就要做折中考虑了,或者要寻找一种更灵巧的设计方案。通常的情况时,某种存储引擎可以满足所有的需要,虽然从表面上看,似乎不支持全部需求。
----------------------------------------------------------------------------------------------------------------------------------
存储引擎 事务 锁粒度 主要应用 忌用
----------------------------------------------------------------------------------------------------------------------------------
MyISAM 不支持 支持并发 select、insert 读写并存的场合
插入的表锁 高负载
----------------------------------------------------------------------------------------------------------------------------------
InnoDB 支持 支持MVCC 事务处理 无
的行级锁
----------------------------------------------------------------------------------------------------------------------------------
分享到:
相关推荐
这份"mysql学习资料大全"包含了一系列的资源,对于想要学习或深入理解MySQL的人来说,是一份非常宝贵的资料集。 首先,从标题我们可以推断,这份资料可能涵盖了MySQL的基础到进阶内容,包括安装配置、SQL语言基础、...
这份压缩包包含的三本书籍是MySQL学习的重要资源,涵盖了从基础到高级的全方位知识。 《MySQL必知必会》这本书是MySQL入门的经典之作,适合对数据库没有基础知识的读者。它详细介绍了MySQL的基本操作,包括如何创建...
在这个“mysql学习用数据库dbt3”压缩包中,包含了一个名为“dbt3_s1.sql”的文件,这通常是用来初始化或恢复数据库的SQL脚本。 在学习MySQL的过程中,理解数据库的设计和管理至关重要。DBT3提供了一种实践环境,让...
本“Mysql学习资料大全”包含了一系列关于MySQL的教程和参考资料,旨在帮助初学者和经验丰富的开发者深入理解和熟练掌握MySQL的各项功能。 首先,从简介及连接部分开始,这部分内容会涵盖MySQL的基本概念,如数据库...
本资源“数据库mysql学习脑图”旨在为MySQL初学者提供一个清晰的学习路径,帮助理解其核心概念和功能。 首先,脑图将可能涵盖数据库基础,包括数据库的概念、数据模型(如层次模型、网状模型、关系模型)以及SQL...
这个“mySQL学习资料.rar”压缩包很可能包含了一系列关于MySQL的学习材料,如教程、手册、示例脚本和使用指南,旨在帮助初学者和进阶者深入理解和掌握MySQL。 首先,让我们来探讨一下MySQL的基础知识。MySQL的核心...
MySQL学习手册中文版是一本全面介绍MySQL数据库管理系统的基础知识的指南,适合初学者及有一定经验的用户进行深入学习。MySQL是一种广泛使用的开源关系型数据库,它以其高效、稳定和易于管理的特点,在各种规模的...
【Linux下MySQL学习笔记】 MySQL是一款广泛应用于互联网的开源关系型数据库管理系统,尤其在Linux操作系统上,其稳定性和性能表现尤为突出。本笔记主要针对在Linux环境下安装、配置、管理和优化MySQL的过程进行详解...
数据库 MySQL 学习笔记高级篇.md
MySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL学习源码(MySQL入门教程).zipMySQL...
MySQL学习资料.zip,包括MySQL基础、进阶、运维
这份“MySQL学习资料”包含了丰富的信息,旨在帮助初学者和有经验的用户更好地理解和操作MySQL。 首先,`MySQL_5.1中文文档`是MySQL 5.1版本的官方中文手册,它是了解和学习MySQL功能、语法、最佳实践的重要资源。...
机房精空调分类2023+MySQL学习练习数据库+MySQL学习毕业设计机房精空调分类2023+MySQL学习练习数据库+MySQL学习毕业设计机房精空调分类2023+MySQL学习练习数据库+MySQL学习毕业设计机房精空调分类2023+MySQL学习练习...
### MySQL学习文档知识点详解 #### 一、MySQL简介与特性 **标题与描述解析:** - **标题**:“Mysql学习文档”表明该文档旨在帮助读者掌握MySQL的相关知识和技术。 - **描述**:“文档讲述的从入门到精通的课程...
1. 数据库概念:了解数据库的基本概念,如数据库、表、字段、记录和索引等,是MySQL学习的基础。数据库是用来存储和管理数据的系统,而表则是数据的结构化存储方式。 2. SQL语言:SQL(Structured Query Language)...
以上就是根据给定文件信息总结出来的MySQL学习文档中的核心知识点。希望这些内容能帮助初学者更好地理解和掌握MySQL的基础操作。随着对MySQL的深入学习,还可以探索更多高级功能,例如事务处理、存储过程、触发器等...
这份"MYSQL 学习指南"旨在帮助初学者和有一定经验的开发者深入理解MySQL的各个方面,提升数据库管理技能。 首先,从基础开始,MySQL的核心概念包括数据库、表、字段和记录。数据库是存储数据的容器,而表则是组织...
这个“mysql学习资料 45讲 深度学习”压缩包包含了多个PDF文件,涵盖了MySQL的关键知识点,包括性能优化、高可用性、主备一致性和安全性等方面。下面我们将深入探讨其中几个关键的主题。 1. **"order by"是怎么工作...
这份"Mysql Mysql学习资料"涵盖了关于MySQL的基础到高级的知识点,对于想要深入理解数据库管理和开发的人员来说是一份宝贵的资源。 1. **MySQL基础知识** - 数据库概念:理解数据库是什么,以及它在存储和管理数据...
在"mysql学习实例"中,你可能会遇到这些基本操作的实践案例,这将有助于你巩固理论知识。 在学习过程中,了解MySQL的数据类型至关重要,如整数(INT)、浮点数(FLOAT, DOUBLE)、字符串(VARCHAR, CHAR)、日期/...