当前位置: 首页 > news >正文

模板网站建设信息第一装修网

模板网站建设信息,第一装修网,ja.wordpress.org,建设银行网站怎么预约纪念币文章目录 MySQL5. 索引的实现5.1 B vs B5.2 聚簇索引 VS 非聚簇索引 6. 索引操作6.1 创建主键索引6.2 创建唯一索引6.3 创建普通索引6.4 创建全文索引6.5 查询索引6.6 删除索引 MySQL 5. 索引的实现 因为MySQL和磁盘交互的基本单位为Page#xff08;页#xff09;。 MySQL 中… 文章目录 MySQL5. 索引的实现5.1 B vs B5.2 聚簇索引 VS 非聚簇索引 6. 索引操作6.1 创建主键索引6.2 创建唯一索引6.3 创建普通索引6.4 创建全文索引6.5 查询索引6.6 删除索引 MySQL 5. 索引的实现 因为MySQL和磁盘交互的基本单位为Page页。 MySQL 中要管理很多数据表文件而要管理好这些文件就需要 先描述在组织 我们目前可以简单理解成一个个独立文件是有一个或者多个Page构成的。 MySQL 会默认按照主键给我们的数据进行排序从上面的Page内数据记录可以看出数据是有序且彼此关联的。 数据页与数据页之间通过指针连成双向链表。 在页模式中只有一个功能就是在查询某条数据的时候直接将一整页的数据加载到内存中以减少硬盘IO次数从而提高性能。但是我们也可以看到现在的页模式内部实际上是采用了链表的结构。 但是多个Page彼此使用双链表链接起来且每个Page内部的数据是基于链表的。那么查找特定一条记录也一定是线性查找效率低。 针对上面的单页Page我们引入目录。 此时给每个数据页建立起对应的目录就是索引。 在单表数据不断被插入的情况下 MySQL 会在容量不足的时候自动开辟新的Page来保存新的数据然后通过指针的方式将所有的Page组织起来——给Page也带上目录。 其实目录页的本质也是页普通页中存的数据是用户数据而目录页中存的数据是普通页的地址。 这个就是B树。 Page分为目录页和数据页。目录页只放各个下级Page的最小键值。 查找的时候自定向下找只需要加载部分目录页到内存即可完成算法的整个查找过程大大减少了IO次数。 5.1 B vs B InnoDB 在建立索引结构管理数据时其他数据结构不合适的原因如下 链表线性遍历效率低。 二叉搜索树可能退化成为线性结构。 AVL 和红黑树虽是平衡或近似平衡的二叉结构但相比多阶 B树树整体过高导致系统与硬盘的 IO Page 交互更多。 HashMySQL 支持但 InnoDB 和 MyISAM 不支持。Hash 算法虽有时查找快O(1)但范围查找不行。 B 树非叶子节点也存储数据这会导致在相同大小的磁盘页中B 树能存储的索引项比 B 树少。从而使得 B 树的阶数相对较低树的高度可能更高增加了磁盘 I/O 操作的次数。 B 树非叶子节点只存储索引信息磁盘页能容纳更多的索引项进一步降低了树的高度减少了 I/O 次数提高了查询性能。 数据结构演示    B树    B树 5.2 聚簇索引 VS 非聚簇索引 MyISAM 这种用户数据与索引数据分离的索引方案叫做非聚簇索引。 MyISAM 引擎同样使用B树作为索引结果叶节点的data域存放的是数据记录的地址。 其中 MyISAM 最大的特点是将索引Page和数据Page分离也就是叶子节点没有数据只有对应数据的地址。 mysql create table mtest(- id int primary key,- name varchar(11) not null- )engineMyISAM;而InnoDB 是将索引和数据放在一起的。 所以InnoDB 这种用户数据与索引数据在一起索引方案叫做聚簇索引。 当然 MySQL 除了默认会建立主键索引外我们用户也有可能建立按照其他列信息建立的索引一般这种索引可以叫做辅助普通索引。 对于 MyISAM ,建立辅助普通索引和主键索引没有差别无非就是主键不能重复而非主键可重复。 mysql create table itest(- id int primary key,- name varchar(11) not null- )engineInnoDB;6. 索引操作 6.1 创建主键索引 1在创建表的时候直接在字段名后指定 primary key。 create table user1(id int primary key, name varchar(30));2在创建表的最后指定某列或某几列为主键索引。 create table user2(id int, name varchar(30), primary key(id));3创建表以后再添加主键。 create table user3(id int, name varchar(30));alter table user3 add primary key(id);主键索引的特点 一个表中最多有一个主键索引当然可以使符合主键。 主键索引的效率高主键不可重复。 创建主键索引的列它的值不能为null且不能重复。 主键索引的列基本上是int。 6.2 创建唯一索引 1在表定义时在某列后直接指定unique唯一属性。 create table user4(id int primary key, name varchar(30) unique);2创建表时在表的后面指定某列或某几列为unique create table user5(id int primary key, name varchar(30), unique(name));3创建表以后再添加。 create table user6(id int primary key, name varchar(30) alter table user6 add unique(name);唯一索引的特点 一个表中可以有多个唯一索引。 查询效率高。 如果在某一列建立唯一索引必须保证这列不能有重复数据。 如果一个唯一索引上指定not null等价于主键索引。 6.3 创建普通索引 1在表的定义最后指定某列为索引。 create table user8(id int primary key, name varchar(20), email varchar(30), index(name) );2创建完表以后指定某列为普通索引。 create table user9(id int primary key, name varchar(20), email varchar(30)); alter table user9 add index(name); 3创建一个索引名为 idx_name 的索引。 create table user10(id int primary key, name varchar(20), email varchar(30)); create index idx_name on user10(name);普通索引的特点 一个表中可以有多个普通索引普通索引在实际开发中用的比较多。 如果某列需要创建索引但是该列有重复的值那么我们就应该使用普通索引。 6.4 创建全文索引 当对文章字段或有大量文字的字段进行检索时会使用到全文索引。MySQL提供全文索引机制但是有要求要求表的存储引擎必须是MyISAM而且默认的全文索引支持英文不支持中文。如果对中文进行全文检索可以使用sphinx的中文版(coreseek)。 如果使用如下查询方式虽然查询出数据但是没有使用到全文索引。 可以用explain工具看一下是否使用到索引。 key为null表示没有用到索引。 如何使用全文索引呢    通过explain来分析这个sql语句。    6.5 查询索引 第一种方法 show keys from 表名; 第二种方法: show index from 表名; 第三种方法信息比较简略 desc 表名 6.6 删除索引 第一种方法-删除主键索引 alter table 表名 drop primary key; 第二种方法-其他索引的删除 alter table 表名 drop index 索引名 索引名就是show keys from 表名中的 Key_name 字段 mysql alter table user10 drop index idx_name;第三种方法方法 drop index 索引名 on 表名 mysql drop index name on user8索引创建原则 比较频繁作为查询条件的字段应该创建索引。 唯一性太差的字段不适合单独创建索引即使频繁作为查询条件。 更新非常频繁的字段不适合作创建索引。 不会出现在where子句中的字段不该创建索引。 其他概念 复合索引 复合索引是指基于多个列创建的索引。 例如在一个表中有 col1、col2 和 col3 列如果创建了一个复合索引 (col1, col2, col3)那么在查询时可以利用这个索引来提高查询效率。 索引最左匹配原则 这是指在使用复合索引进行查询时必须从索引的最左侧开始匹配。 例如如果复合索引是 (col1, col2, col3) 那么查询条件中只有以 col1 开头或者以 col1 和 col2 开头或者以 col1、col2 和 col3 开头的查询才能使用到这个复合索引。 例如如果有查询语句 WHERE col1 1 AND col2 2 或者 WHERE col1 1 可以使用该复合索引但 WHERE col2 2 则无法使用。 索引覆盖 索引覆盖是指查询所需的所有列的数据都可以从索引中直接获取无需回表查询数据行。 例如如果有一个索引 (col1, col2) 并且查询语句只是 SELECT col1, col2 FROM table 那么就实现了索引覆盖因为所需的列都在索引中可以直接获取不需要再根据索引找到数据行获取其他列的值。 这样可以大大提高查询效率。
http://www.hkea.cn/news/14462450/

相关文章:

  • 深圳四站合一网站建设电话找建筑师设计房子
  • 小说网站wordpress手机评分网站
  • 中高端网站建设公司鞍山网站制作的网站
  • wordpress建网站的优点qq飞车哪个公司开发的
  • 建一个网站需要多长时间各网站网络营销产品价格策略
  • 网站开发 外包中国广告设计网
  • 网站空间是虚拟机吗抖音代运营公司怎么找客户
  • 一个域名访问不同的网站vi设计收费
  • 做一个网站开发项目有哪些阶段网站备案大概多久
  • 北京建设信源资讯网站官网哪些广告平台留号码
  • 如何做后台网站增删改做类似淘宝的网站要多少钱
  • 网站建设的自查报告wordpress猜你喜欢
  • 建设环境工程技术中心网站怎么做好网站开发、设计
  • 时代设计网 新网站建一个动物网站怎么做
  • 口碑好的合肥网站建设成都网络推广哪家公司好
  • 网站模板可以自己做国外搜索引擎
  • 深圳火狼设计公司招聘网站绿色食品网站模板
  • 聊城那里做网站帝国音乐网站怎么做数据表
  • 上海企业网站排名优化天津企业网站设计报价
  • wordpress自带评论代码西安seo专员
  • html5中文网站欣赏做邀请函用哪个网站好呢
  • godaddy wordpress主机手机网站如何做优化
  • 温州平阳县企业网站搭建推荐软件开发工程师怎么考
  • 南阳seo网站排名网站设计的公司工作室
  • 佛山品牌网站设计如何在百度里建网站
  • 石家庄做网站推广建设工程质量监督网站
  • 8网站免费建站公司网站招聘模板
  • 桂林网站建设动服卖照明电源设响应式装饰设计公司网站源码
  • 低代码平台app优化推广
  • 南昌电子商务网站建设网站建设公司找博行