MyISAM

When it is time for a table to change from MyISAM to InnoDb?

為{幸葍}努か 提交于 2019-12-07 02:50:11
问题 This question is like a continuation of my previous question: Am I right that InnoDb is better for frequent concurrent updates and inserts than MyISAM? But this time I have concrete questions. We know that MyISAM is faster than InnoDb when we don't have many concurrent updates (inserts). When we have many concurrent updates MyISAM table gets locked and all other clients should wait. 1) But when it is time to change from MyISAM to InnoDb? 1 update every second? 10 updates every second? 100

Mysql数据库调优

╄→гoц情女王★ 提交于 2019-12-07 01:55:05
1. 简介 在Web应用程序体系架构中,数据持久层(通常是一个关系数据库)是关键的核心部分,它对系统的性能有非常重要的影响。MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,仅仅是一个玩具数据库。因此在产品中使用MySQL数据库必须进行必要的优化。 优化是一个复杂的任务,本文描述MySQL相关的数据库设计和查询优化,服务器端优化,存储引擎优化。 2. 数据库设计和查询优化 在MySQL Server性能调优中,首先要考虑的就是Database Schema设计,这一点是非常重要的。一个糟糕的Schema设计即使在性能调优的MySQL Server上运行,也会表现出很差的性能;和Schema相似,查询语句的设计也会影响MySQL的性能,应该避免写出低效的SQL查询。这一节将详细讨论这两方面的优化。 2.1 Schema Design Schema的优化取决于将要运行什么样的query,不同的query会有不同的Schema优化方案。2.2节将介绍Query Design的优化。Schema设计同样受到预期数据集大小的影响。Schema设计时主要考虑:标准化,数据类型,索引。 2.1.1 标准化 标准化是在数据库中组织数据的过程。其中包括,根据设计规则创建表并在这些表间建立关系;通过取消冗余度与不一致相关性,该设计规则可以同时保护数据并提高数据的灵活性

MySQL优化-2-数据库对象

拈花ヽ惹草 提交于 2019-12-06 22:29:58
优化表的数据类型 - PROCEDURE ANALYSE() 表需要使用何种数据类型,是需要根据应用来判断的。虽然应用设计的时候需要考虑字段的长度留有一定的冗余,但是不推荐让很多字段都留有大量的冗余,这样即浪费存储也浪费内存。我们可以使用PROCEDURE ANALYSE()对当前已有应用的表类型的判断,该函数可以对数据表中的列的数据类型提出优化建议,可以根据应用的实际情况酌情考虑是否实施优化。 语法: SELECT * FROM tbl_name PROCEDURE ANALYSE(); SELECT * FROM tbl_name PROCEDURE ANALYSE(16,256); 输出的每一列信息都会对数据表中的列的数据类型提出优化建议。第二个例子告诉PROCEDURE ANALYSE()不要为那些包含的值多于16 个或者256 字节的ENUM 类型提出建议。如果没有这样的限制,输出信息可能很长;ENUM 定义通常很难阅读。 在对字段类型进行优化时,可以根据统计信息并结合应用的实际情况对其进行优化。 通过拆分提高表的访问效率: 这里我们所说的拆分,主要是针对Myisam 类型的表,拆分的方法可以分成两种情况: 1. 纵向拆分: 纵向拆分是只按照应用访问的频度,将表中经常访问的字段和不经常访问的字段拆分成两个表,经常访问的字段尽量是定长的

MySQL MyISAM table locking

冷暖自知 提交于 2019-12-06 21:28:27
问题 Does a MySQL MyISAM table gets locked when records are deleted from it? 回答1: MyISAM tables supports table level locking, and yes, a write lock is employed when deleting (or insert & updating) records. For more info, see Internal Locking Methods 来源: https://stackoverflow.com/questions/1951161/mysql-myisam-table-locking

Which MySQL database engine is better for storing sessions and session data: MyISAM or InnoDB?

时光怂恿深爱的人放手 提交于 2019-12-06 21:11:04
问题 Pretty straightforward question. I use InnoDB for everything else, for a couple of reasons. Is it a performance hit over MyISAM for a 'high-traffic' table? 回答1: Since you're looking at a pretty even mix of read/write traffic, InnoDB is the better choice. MyISAM's full-table locks on every write would probably be murder. MyISAM fairs better with 90%+ read or 90%+ write situations. I believe that's mentioned in High Performance MySQL 来源: https://stackoverflow.com/questions/3359403/which-mysql

java面试常用问题

别等时光非礼了梦想. 提交于 2019-12-06 17:23:06
MYSQL一个语句很慢,怎么调优法? 因为问题是调优,也就是基本不能改变整体的现有实现。下面分析慢的原因并给出对应可能正确的解决方案 1、SQL语句本身的优化,比如去掉不必要的排序等。 2、如果是查询过于复杂,也即包含了逻辑(体现在还需要在Java等代码中组织数据),这时可以尝试编写存储过程将这一过程原子化,可以减少访问数据库的次数。 3、如果SQL已经无法继续改进,业务也已固定,那么从SQL本身是没法优化了,可以试着使用缓存,前提是数据主要用于读,而不是频繁的修改。 线程池的机制是怎么样的? 比如 线程池大小为10, 现在有100个线程等待运行。 介于这个问题,如果是Java,我就默认楼主说的是FixedThreadPool线程池(定长)了。 有新的线程就交给线程池,它会负责管理,此处假设设定的最大并发为10个线程,如果已经有10个线程在执行了,那么后续的90个线程会进入队列,直到之前已经开始执行的10个线程中有一个或者多个执行完毕,这90个中的一个或多个就会被线程池执行。 一个网页打开很慢,页面很慢怎么调优?从哪些方面,具体怎么调优? 首先 确定慢的原因在哪里:浏览器渲染还是从服务器获取数据很慢。 一般是从服务器获取数据慢: 域名解析慢,这个一般不会出现问题,不过不排除 服务器原因: 网络带宽太小 应用服务器性能问题: 1、是不是数据库查询太慢,看下数据库的慢日志,若有相关记录

03.事务隔离

孤者浪人 提交于 2019-12-06 13:09:25
简单来说,事务就是要保证一级数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的,但MySQL中并不是所有引擎都支持事务,比如Mysql原生的MyISAM引擎就不支持事务。 下面,我们将心InnoDb为例,剖析MySQL在事务支持方面的特定实现。 隔离性与隔离级别 提到事务,你一定会想到ACID(Atomicity、Consistency、Isolation、Durability),即原子性、一致性、隔离性、持久性,下面我们就来说说其中的I,也就是隔离性。 当数据库上有多个事务同时执行的时候,就会可能会出现脏读、不可重复读、幻读的问题,为了解决这些问题,就有了“隔离级别”的概念。 在谈隔离级别之前,你首先要知道,你隔离得越严实,效率就会越低。因此很多时间,我们要在二者之间找一个平衡点。SQL标准的事务隔离级别有:读未提交、读已提交、可重复读和串行化。 读未提交:一个事务还没有提交时,它做的变更能被别的事务看到。 读已提交:一个事务提交之后,它做的变更才能被其它事务看到。 可重复读:一个事务执行过程中看到的数据,总是和这个事务启动时看到的事务一致。 串行化:对同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。 其中“读提交”和“可重复读”比较难理解

数据库存储引擎的索引实现

廉价感情. 提交于 2019-12-06 10:30:49
一、常见的两种存储引擎对数据的存储: InnoDB和MyISAM要了解这两种引擎的索引实现原理,先要知道这两种引擎对于数据存储的区别。数据库引擎其实是对表的一种形容,同一个库下可能存在多种不同引擎的表。所以下面我会建两张表进行对比。product表和user表他们分别是InnoDB和MyISAM引擎的表。如图: 数据库的数据其实都是存储再磁盘文件中的。data下就是对应的数据库enginetest就是本次新建的测试库了 再打开下一层目录会发现,库中存放的就是表的数据了。两种引擎的区别在这里就十分明显了 显然,MyISAM引擎有三个文件,分别是.frm(数据结构).MYD(数据).MYI(索引),看名字就能看出来了。DATA,INDEX...文件里面具体是什么     InnoDB引擎只有两个文件,一个是.frm(数据结构),一个是.ibd(索引+数据) 接下来我们先看MyISAM引擎的文件到底是什么 你一定想知道这些文件里面到底是什么,虽然我想mysql一定不会把数据简单的裸存在文件中。还是好奇的打开看了一眼,啧啧啧好吧,看不到具体内容,不过MYD文件中显然已经暴露了部分user的信息了,就是张三同学和李四同学,emmm... MYI文件的确是索引,但是原谅我肉眼看不懂,能看懂的大神可以解释下...不过对MyISAM存储数据的分析之后再看其索引实现就很简单了,如下图: 二

What causes MyISAM to become corrupt? [closed]

巧了我就是萌 提交于 2019-12-06 05:26:23
问题 Closed . This question needs to be more focused. It is not currently accepting answers. Want to improve this question? Update the question so it focuses on one problem only by editing this post. Closed 11 months ago . I've heard that MyISAM tables can become corrupt, what sort of actions are most likely to corrupt them and how can you safely fix said corruptions. 回答1: The MySQL documentation is quite explicit about that: http://dev.mysql.com/doc/refman/5.1/en/corrupted-myisam-tables.html 回答2:

单表数据量超过千万的优化方案

感情迁移 提交于 2019-12-06 02:14:28
1. 数据库设计和表创建时就要考虑性能 2.sql 的编写需要注意优化 4. 分区 4. 分表 5. 分库 数据库设计和表创建时就要考虑性能 设计表时要注意: 表字段避免null值出现,null值很难查询优化且占用额外的索引空间,推荐默认数字0代替null。 尽量使用INT而非BIGINT,如果非负则加上UNSIGNED(这样数值容量会扩大一倍),当然能使用TINYINT、SMALLINT、MEDIUM_INT更好。 使用枚举或整数代替字符串类型 尽量使用TIMESTAMP而非DATETIME 单表不要有太多字段,建议在20以内 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在WHERE和ORDER BY命令上涉及的列建立索引,可根据EXPLAIN来查看是否用了索引还是全表扫描 应尽量避免在WHERE子句中对字段进行NULL值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用UNIQUE,由程序保证约束 使用多列索引时主意顺序和查询条件保持一致,同时删除不必要的单列索引 简言之就是使用合适的数据类型,选择合适的索引 # 选择合适的数据类型 ( 1 )使用可存下数据的最小的数据类型,整型 < date,time <