zoukankan      html  css  js  c++  java
  • MySQL(二)

    MySQL架构

       

     执行流程

     存储引擎介绍

    MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

    • 多存储引擎是mysql有别于其他数据库的一大特性;
    • 存储引擎是针对表的
    • MySQL 5.5之后,默认的存储引擎由MyISAM变为InnoDB

    查看存储引擎:show engines;

    MySQL物理结构

    MySQL是通过文件系统对数据进行存储和管理的。

    MySQL从物理结构上可以分为日志文件和数据文件。

    日志文件

    MySQL通过日志记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和 InnoDB 引擎在线 Redo 日志、中继日志等。

    查询日志(general query log):

    默认情况下通用查询日志是关闭的。

    由于通用查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。

    事务日志:

    • 它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化。事务日志还称作前滚日志或重做日志。
    • 在缺省情况下,所有数据库都使用事务日志。事务日志的使用是可选的,但是,除非您因特殊原因而不使用,否则您应始终使用它。运行带有事务日志的数据库可提供更强的故障保护功能、更好的性能以及数据复制功能。

    中继日志:

    是在主从复制环境中产生的日志。

    主要作用是为了从机可以从中继日志中获取到主机同步过来的SQL语句,然后执行到从机中。

    数据文件

    查看MySQL数据文件SHOW VARIABLES LIKE '%datadir%';

    • .frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息。
    • .ibd和.ibdata文件:用来存储InnoDB存储引擎表数据和索引信息。
    • .myd文件:主要用来存储使用MyISAM存储引擎的表数据信息
    • .myi文件:主要用来存储使用MyISAM存储引擎的表数据文件中任何索引的数据树

    MySQL索引

    介绍

    使用索引的主要目的是为了优化查询速度

    索引是一种特殊的文件或者叫数据结构(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

    索引的分类

    单列索引

    1. 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。
    2. 唯一索引:索引列中的值必须是唯一的,但是允许为空值
    3. 主键索引:是一种特殊的唯一索引,不允许有空值

    组合索引在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

    组合索引(name,age,address)
    
    正确可以使用组合索引的语句
     select * from 表名 where name = 'zhangsan' and age = 18 and address = '×××路'
     select * from 表名 where name = 'zhangsan' and age = 18
     select * from 表名 where name = 'zhangsan'
    
    不能正确使用组合索引的语句
     select * from 表名 where name = 'lisi' and address = '×××路'
     select * from 表名 where age = 18 adn name = 'lisi'

    全文索引全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引。

    索引的使用

    创建索引

    CREATE INDEX index_name ON table(column(length)) 
    ALTER TABLE table_name ADD INDEX index_name ON (column(length))
    
    CREATE UNIQUE INDEX index_name ON table(column(length)) 
    CREATE FULLTEXTINDEX index_name ON table(column(length)) 
    
    ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))

    删除索引

    DROP INDEX index_name ON table

    非聚集索引

    • 叶子节点只会存储数据行的指针,简单来说数据和索引不在一起,就是非聚集索引。
    • 主键索引和辅助索引都会存储指针的值

    聚集索引

    • 主键索引(聚集索引)的叶子节点会存储数据行,也就是说数据和索引是在一起,这就是聚集索引。
    • 辅助索引只会存储主键值
    • 如果没有没有主键,则使用唯一索引建立聚集索引;如果没有唯一索引,MySQL会按照一定规则创建聚集索引使用索引的注意事项

     

  • 相关阅读:
    在ASP.NET 2.0中使用WebParts
    Asp.net生成静态页面原理
    提高ASP.Net应用程序性能的十大方法
    Web2.0之Tag标签原理实现浅析
    ASP.NET 2.0中的URL映射
    动态加载控件UserControl到页面上:视图状态问题
    C#自动登录网页浏览页面 抓取数据
    .NET Framework 类库提供的命名空间
    一个用于热部署的框架设想
    重构如何进行?
  • 原文地址:https://www.cnblogs.com/dzlj/p/12104352.html
Copyright © 2011-2022 走看看