精华内容
下载资源
问答
  • innodb mysql的锁和索引

    千次阅读 2013-12-30 16:49:20
    InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,...

    记录下工作中使用到的关于mysql的一些问题。待完善

    InnoDB行锁

    InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

    联合索引

    联合索引指的是可以在多个列上添加索引

    alter table t add index idx_a_b(a,b);

    联合索引的好处是:

     1)对于类似select * from t where a = 1 and b = 'aaaaaaaaaaaaaaaaaaaaaaaaa...'的查询和select * from t where a = 1这样的也可以使用(a,b)索引,但是对select * from t where b = ‘xxxx’ 时 b就不能使用了(即如果查询条件只有一个时,只有是位于联合索引第一个位置的查询可以使用索引)

     2) 可以对第2键值进行排序

    联合索引可以用在如下场景:

         如对对A B C建立联合索引,则下面的使用场景可以使用到

    1. select d from table where A = “x” and B= "y” and C = "z” :此时对A B C均能使用索引
    2. select d from table where A = “x” and B >= "Y" and c = "z" : 此时对A可以使用索引,对B也能使用索引,而C则不能使用索引。是因为如果联合索引中某个字段使用了范围索查询,则后面的字段则不能再使用索引
    3. 联合索引ABC最多只能满足A,AB, ABC三种查询,如果需要B、C单独使用索引则需要另外建立索引。通过explain的key_len则可以看出使用了联合索引的哪些部分。AC的查询则只能使用联合索引的A部分

    联合索引使用时的注意事项

    1. 联合索引中使用范围查询的,应该尽量将范围查询放在后面,因为前面的字段使用了范围查询,其后的索引将不在有效(可以考虑使用in or代替,但是in内的内容太多的话,也会导致查询优化慢和消耗内存,因为in内内容多会导致查询计划的组合数多)
    2. 同等情况下应该优先使用联合索引,而不是一个一个的单一索引,因为联合索引将多个索引建立在一个btree上面,比多个单一的btree省空间,并且可以在一次查询使用多个索引。(使用场景为查询时多个条件的)
    3. 不建议联合索引的字段过多,因为联合索引的使用有限(必须符合最左前缀),过多会造成联合索引中索引的利用率不高。同时联合索引的字段数最多不超过16(系统限制)

    order by 和索引

    order by A desc, B asc  时不能使用索引,使用索引的话必须要求顺序一致。即如果有此类需求,建议处理为A 和B 顺序一致,比如B的值都取负。

    索引的tips

    1. mysql的一张表一次查询最多使用一个索引
    2. 索引上不能有任何运算,有运算将使用不到索引: 比如select * from table where id+1 = 5;就不行,而改为select * from table where id = 4 才可以
    3. 写操作多的应用不一定要有需要索引,需要考虑读写比例
    4. 数字型索引比字符串索引更高效,查询更快,占用空间更小
    5. 使用!= 或者<>的时候mysql 无法使用索引
    6. MyISAM中索引长度不能超过1000
    7. 可以枚举的字段使用枚举查询和索引的效率会更高:需要考虑枚举的扩展性,因为增加一种枚举需要alter表

    refer:http://hudeyong926.iteye.com/blog/1490687

    refer:http://www.cnblogs.com/hitwtx/archive/2011/09/13/2174952.html

    展开全文
  • innodb插件mysql

    2015-07-15 09:59:20
    innodb_plugin-1.0.6.tar.gz工具兼容mysql插件
  • MySQL-InnoDB

    2014-04-28 23:28:10
    MySQL-InnoDB的SSD L2Cache实现方案
  • MySQL中.frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关。MySQL中.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。
  • mysql innodb架构

    千次阅读 2017-01-18 14:09:22
    mysql innodb架构 图来自网络,个人觉得特别好,推荐给大家!

    innodb架构主要由:后台线程、内存池、物理文件组成,此处附图一张:


    一、后台线程

    1)Master Thread

    Master Thread 是一个非常核心的线程,主要负责将缓存池中的数据异步刷新到磁盘,保证数据的一致性,包括脏页数据、合并插入缓存、undo页的回收等。

    2)IO Thread 

    InnoDB 存储引擎大量使用了AIO来处理IO请求,这样可以提高数据库的性能。IO Thread主要负责这些IO请求的回调处理。

    涉及参数:innodb_read_id_thread 、innodb_write_io_thread

    3)purge Thread 

    用来回收已经使用并分配的undo页。 1.1版本之前purge操作在Master Thread中完成,而从1.1版开始,purge操作可以到单独线程中来处理。

    涉及参数:innodb_purge_threads 1.1默认为1  不可设置大于1,1,在1.2版可以设置为多个。

    4)page thread cleaner 1.2版引入,作用是将脏页的刷新放在单独的线程来执行。

    二、内存

    1) 缓冲池 innodb_buffer_pool

    索引页index page、数据页datat page、undo页、插入缓存 insert buffer、自适应哈希索引、innoDB存储的锁信息 lock info、数据字典

    重做日志缓冲池 redo_log_buffer

    额外缓冲池 innodb_addition_mem_pool_size

    2)LRU(Lastt Recent Used,最近最少使用)

    mysql对LRU进行了一些优化,加入了midpoint位置。新读到的页虽然是最新访问的页,但不直接放入LRU列表的首部,而是放在midpoint位置。

    正常情况下位置在LRU的列表长度的5/8处。  参数:innodb_old_blocks_pct,该参数设置新页插入LRU列表的百分比。

    主要是为了防止访问全部的页把活跃度高的页挤走。

    三、物理文件

    暂时不讨论了

    展开全文
  • MySQL innodb 8.0 新特性

    2018-07-09 10:54:32
    MySQL innodb 8.0 新特性 Oracle原厂工程师52页PPT MySQL innodb 8.0 新特性
  • Mysql Innodb死锁解决

    千次阅读 2017-02-07 11:00:19
    mysql innodb 死锁
    • 场景:在操作数据库的过程中,由于一些原因,如:事务未正常提交/回滚等造成数据库死锁,导致其他需要事务的操作出现锁等待超时的错误,Lock wait timeout exceeded; try restarting transaction。

    • 查询数据库死锁的线程id:

      SELECT * FROM information_schema.INNODB_TRX\G
    • 查询结果如下:

      mysql> SELECT * FROM information_schema.INNODB_TRX\G
      
      ************************** 1. row **************************
      
      trx_id: 189324
      
      trx_state: RUNNING
      
      trx_started: 2017-02-17 10:00:00
      
      trx_requested_lock_id: NULL
      
      trx_wait_started: NULL
      
      trx_weight: 3
      
      trx_mysql_thread_id: 5
      
      trx_query: NULL
      
      trx_operation_state: NULL
      
      trx_tables_in_use: 0
      
      trx_tables_locked: 0
      
      trx_lock_structs: 2
      
      trx_lock_memory_bytes: 376
      
      trx_rows_locked: 3
      
      trx_rows_modified: 1
      
      trx_concurrency_tickets: 0
      
      trx_isolation_level: REPEATABLE READ
      
      trx_unique_checks: 1
      
      trx_foreign_key_checks: 1
      
      trx_last_foreign_key_error: NULL
      
      trx_adaptive_hash_latched: 0
      
      trx_adaptive_hash_timeout: 10000
      
      trx_is_read_only: 0
      
      trx_autocommit_non_locking: 0
      
      1 row in set (0.01 sec)
    • 杀掉死锁线程:

      kill 5;
    展开全文
  • mysql-innodb

    2014-04-29 15:15:01
    MySQLInnoDB存储引擎,InnoDB在内存中维持着自己的缓冲区,用来缓存数据和索引。InnoDB的数据和索引存放在表空间中,表空间可以是共享的,也可以是独享的。
  • MySql Innodb底层存储架构
  • MySQL Innodb 索引原理详解
  • MySql Innodb 引擎特性详解
  • 主要介绍了MySQL InnoDB存储引擎的相关资料,帮助大家更好的了解MySQL的存储引擎,感兴趣的朋友可以了解下
  • Mysql引擎 Innodb和MyISAM的区别

    千次阅读 2016-02-19 17:45:32
    Mysql数据库分为Innodb和Myisam两类。两者最主要的区别是:Innodb支持事务处理、外键和行级锁.而MyISAM不支持,所以如果CUD比较频繁或要求事务一致性的,使用Innodb比较好,反之使用Myisam比较好。具体区别如下: 1...

    本文是摘抄其他网文整理而成。create database xxx engine=Innodb

    Mysql数据库分为Innodb和Myisam两类。两者最主要的区别是:Innodb支持事务处理、外键和行级锁.而MyISAM不支持,所以如果CUD比较频繁或要求事务一致性的,使用Innodb比较好,反之使用Myisam比较好。具体区别如下:

    1、索引:MyISAM的索引和数据是分开的,并且索引是有压缩的,而Innodb是索引和数据放在一起,且没有使用压缩,因而Innodb比MyISAM体积更大。MyISAM每张表都包括三种文件:表定义文件(.frm)、数据文件(.myd)和索引文件(.myi),而Innodb通常许多表保存在同一个文件中。此外,如果表数据非常大,通常也使用MyISAM。

    2、InnoDB不支持FULLTEXT类型的索引。

    3、对于AUTO_INCREMENT类型的字段,InnoDB中必须单独建索引,而在MyISAM中可以和其他字段一起建立联合索引。

    4、没有where的SELECT COUNT(*):MyISAM始终保留一张表的行数,因此这条语句几乎瞬间就可以执行完,而Innodb会一行行的累加。

    5、锁:MyISAM表锁,Innodb行锁

    展开全文
  • 玩转mysql就是玩转 Innodb 引擎
  • MySQL InnoDB Cluster搭建

    万次阅读 2017-07-16 13:21:33
    MySQL InnoDB Cluster是一套完整的、高可用的Mysql解决方案。一组MySQL服务器可以配置为一个MySQL集群。在默认的单主节点模式下,集群服务器具有一个读写主节点和多个只读辅节点。辅助服务器是主服务器的副本
  • MySQL 5.5 禁用 innodb

    千次阅读 2014-02-27 00:46:47
    MySQL 5.5 禁用 innodb 编辑: my.ini 添加: default-storage-engine=MYISAM skip-innodb
  • 查看MySQL版本 代码如下:mysql -V或者可以登录MySQL使用select version();或status;命令查看 二、开始工作 关闭MySQL 代码如下:service mysql stop如果上面的命令无法关闭MySQL,则使用kill -9命令强制杀掉进程; ...
  • MySQL优化之InnoDB优化

    2020-09-09 19:36:55
    InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。那么它就不需要优化了吗,答案很显然:当然不是...
  • 主要介绍了MySQL InnoDB的索引扩展的相关资料,帮助大家更好的理解和学习MySQL,感兴趣的朋友可以了解下
  • MySQL Innodb锁解决并发问题
  • MySql innodb 引擎表存储分析
  • Mysql innodb tablespace 表空间实践
  • MySQL技术内幕:InnoDB存储引擎》是国内目前唯一的一本关于InnoDB的著作,由资深MySQL专家亲自执笔,中外数据库专家联袂推荐,权威性毋庸置疑。内容深入,从源代码的角度深度解析了InnoDB的体系结构、实现原理、...
  • MySQL Forcing InnoDB Recovery

    千次阅读 2016-03-23 15:50:00
    MySQL非正常重启或者磁盘故障可能导致MySQL数据文件损坏。这种情况下,如果没有可用的备份文件则可使用innodb_force_recovery选项强制InnoDB引擎启动。这时一些后台操作不会运行,可以较为安全的dump出数据库中的表...
  • MySQL 5.7 优化InnoDB配置

    千次阅读 2017-07-13 16:18:39
    InnoDBMySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大...
  • MySQL InnoDB表恢复

    千次阅读 2017-07-09 06:53:17
    https://dev.mysql.com/doc/refman/5.7/en/innodb-recovery.html 14.18.2 InnoDB 恢复 本章节讲述InnoDB表恢复。内容包括: Point-in-Time恢复从数据损坏或磁盘故障恢复InnoDB崩溃恢复崩溃恢复中的表空间发现...
  • MySQL InnoDB 存储结构

    千次阅读 2018-09-24 00:50:38
    MySQL InnoDB 存储结构 InnoDB存储引擎的关键特性包括: 插入缓冲(Insert Buffer) 两次写(Double Write) 自适应哈希索引(Adaptive Hash Index) 异步IO(Async IO) 刷新邻接页 从逻辑上讲 所有的数据都被...
  • you need MySQL built with ‘InnoDB’ to have it working; 是mysql配置文件禁掉了这个选项! 关闭mysql数据库 在mysql的安装目录中找到my.ini文件 找到skip-innodb,在前面加上#号 保存,开启mysql数据库!搞定...
  • MySQL快速从MyISAM迁移到InnoDB

    千次阅读 2018-08-03 17:39:10
    MySQL快速从MyISAM迁移到InnoDB mysql -u [USER_NAME] -p -e "select TABLE_NAME from information_schema.tables where table_schema='DATABASE_NAME' and engine='MyISAM';" | tail -n +2 | xargs -I ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 319,449
精华内容 127,779
关键字:

innodbmysql

mysql 订阅