BTree

Android之ListView,AsyncTask,GridView,CardView,本地数据存储,SQLite数据库

痞子三分冷 提交于 2020-11-06 05:36:10
版权声明:未经博主允许不得转载 补充 补充上一节,使用 ListView 是用来显示列表项的,使用 ListView 需要两个xml文件,一个是列表布局,一个是单个列表项的布局。如我们要在要显示系统所有app列表项时,需要左边app image 视图和右边文本视图。 一个是列表布局 all_app_list.xml <ListView android:id="@android:id/app_list" android:layout_width="match_parent" android:layout_height="wrap_content"/> 单个列表项的布局 list_item.xml <ImageView android:id="@+id/icon_image_view" android:layout_width="60dp" android:layout_height="60dp" android:src="@mipmap/ic_launcher"/> <TextView android:id="@+id/title_text_view" android:layout_width="match_parent" android:layout_height="60dp" android:text="@string/app_name" android:textSize=

什么是 B+树,B树,红黑树?

早过忘川 提交于 2020-11-02 10:44:09
二叉树: 关于二叉树的详细介绍: https://baike.baidu.com/item/%E4%BA%8C%E5%8F%89%E6%A0%91/1602879?fr=aladdin 动态生成的网站: https://www.cs.usfca.edu/~galles/visualization/BST.html 特性 1.如图我们可以看出二叉树的特性:如果新增的节点值比父节点小会排在父节点左侧 比父节点大会排在父节点右侧【且子节点至多有两个节点】 例如:0009 这个值是先找到0010 比他小 排在左侧 而左侧又有了节点【值为0006】 相比0006又大了 排在0006的右侧 但会存在一种情况,让二叉树呈现一种线性表的样子【那就是数据单调递减或者递增】 示例1: 示例2: 删除某个节点 ,其下的所有子节点会挂到该节点的父节点上。并不是全部删除。 查询方式是从上之下 如果该值大于父节点 找左侧 小于父节点找右侧 依次类推,当树结构为线性表结果时 查询效果与线性表一样。一般情况下查询效率大于线性表。 红黑树 (又叫平衡二叉树) 特性: 1.在二叉树基础上会做树的平衡。 2.一个节点存放一个索引 2的n次方=数据量 当数据两比较大,树的高度就越高 这样控制树的高度 减少查询的次数 提高查询的效率 B树 (B Tree) B+树 (多叉平衡树) 详细介绍: https://baike

高性能Mysql

一世执手 提交于 2020-11-01 21:41:42
索引及数据库高性能基础 作为最核心的内功知识,也是面试中我对应聘者的重点考察项之一。迄今为止,在这方面能让我完全满意的应聘者寥寥无几。 **注意:**这里介绍的技能对Mysql、SqlServer、Oracle等关系型数据库基本通用,比较而言,Mysql索引机制更加简单,为了排除更高级的数据库特性带来的复杂性,本文采用Mysql作为性能分析案例。 另外 Mysql常见的存储引擎:MyISAM、InnoDB,实际项目中极少采用MyISAM,大多采用InnoDB。 InnoDB的索引类型:BTREE、HASH,实际项目中很少使用HASH索引,基本都采用BTREE 故采用InnoDB和BTREE作为案例分析更具有普遍性。以下介绍的基础知识可能随着Mysql的版本发展会有少许变化。 I 关于索引 数据准备 建测试表: CREATE TABLE `user_info` ( `user_id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL, `age` int(18) NOT NULL, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=10000001 DEFAULT CHARSET=utf8 生成测试数据: public class FileGen

索引的类型及分类

百般思念 提交于 2020-10-30 03:09:21
一、索引方法 Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。 1. FULLTEXT 即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。 全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。 2. HASH 由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。 HASH索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。但是,这种高效是有条件的,即只在“=”和“in”条件下高效,对于范围查询、排序及组合索引仍然效率不高。 3. BTREE BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,依次遍历node,获取leaf。这是 MySQL里默认和最常用的索引类型。 4. RTREE RTREE在MySQL很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。 相对于BTREE,RTREE的优势在于范围查找。 ps

SQL语句入门-创建表(PostgreSQL)

谁说胖子不能爱 提交于 2020-10-29 13:26:58
SQL-CREATE TABLE 本文讲讲关于建立数据库表结构的CREATE语句,我用的postgreSQL来实现,其他的应该大同小异,主要是了解SQL语句 语法 CREATE TABLE 的语法格式如下: CREATE TABLE table_name ( column1 datatype , column2 datatype , column3 datatype , . . . ) ; CREATE TABLE 是一个关键词,table_name为表名,表明必须在同一模式的其他表、序列、索引、视图或外部表表名中唯一。 实例&讲解 这里我直接拿当时数据库的作业来详细讲解一下关于建立表结构的一些内容 现在需求如下: 这里我的实现的代码如下: CREATE TABLE student ( sno varchar ( 8 ) primary key not null , sname varchar ( 8 ) not null , ssex varchar ( 2 ) check ( ( ssex = 'M' ) or ( ssex = 'F' ) ) , sbirthday date , classno varchar ( 6 ) references class ( classno ) , Totalcredit smallint default 0 ) ; CREATE

B树索引最通俗易懂的介绍

余生长醉 提交于 2020-10-28 02:22:13
先来一段有莫的对话: 前几天下班回到家后正在处理一个白天没解决的bug,厕所突然传来对象的声音:   对象:xx,你有《时间简史》吗?   我:我去!妹子,你这啥癖好啊,我有时间也不会去捡屎啊!   对象:...人家说的是霍金的科普著作《时间简史》,是一本书啦!   我:哦,那我没有...   对象:人家想看诶,你明天帮我去图书馆借一本吧...   我:我明天还要改...   对象:你是不是不爱我了,分手!   我:我一大早就去~   第二天一大早我就到了图书馆,刚进门就看到一个索引牌,标识着不同楼层的功能,这样我很快能定位到我要找的目标所在的楼层了。      我到楼上后又看到每排的书架上又对书的分类进行了细分,这样我能更快的定位到我要找的书具体在哪个书架!   并且每个楼层都有一台查询终端,输入书名就能查到对应的唯一标识“索书号”,类似于P159-49/164这样的一个编码,书架上的书都是按照这个编码进行排序的!有了这个编码再去对应的书架上,很快就能找到对应的书在书架的具体位置了。      不到十分钟,我就从图书馆借好书出来了。   这么大的图书馆,我为什么能在这么短的时间内找到我要的书?如果这些书是杂乱无章的堆放,或者没有任何标识的放在书架,我还能这么快的找到吗?   这不禁让我想到了我们开发中用到的数据库,图书馆的书就类似我们数据表中的数据,楼层索引牌、书架分类标识

MySQL 树形索引结构 B树 B+树

橙三吉。 提交于 2020-10-27 17:57:07
MySQL 树形索引结构 B树 B+树 如何评估适合索引的数据结构 索引的本质是一种数据结构 内存只是临时存储,容量有限且容易丢失数据。因此我们需要将数据放在硬盘上。 在硬盘上进行查询时也就产生了硬盘的I/O操作,而硬盘的I/O存取消耗的时间要比读取内存大很多。因此 数据查询的时间主要决定于I/O操作的次数 。 每访问一次节点就需要对磁盘进行一次I/O操作 。 树模型 二分查找的时间复杂度是O(log2n),是一种很高效的查询方式。在一系类树种使用二分查找的树有很多,但并不是所有树都适合作为索引的结构。 Binary Search Tree 二叉搜索树(BST) 性质: 对任意节点,左子树不为空则左子树所有节点小于或等于该节点的值 对任意节点,右子树不为空则右子树所有节点大于或等于该节点的值 但二叉搜索树不一定是"平衡的",它有可能退化成一条链表,那么他的搜索时间就变成了O(n)。 平衡二叉搜索树(AVL) 为了避免退化成一条链表,人们提出了二叉搜索树,AVL在二叉搜索树的基础上增加了约束: 每个节点的左子树和右子树的高度差不能超过1 也就是说要求节点的左右子树仍然为平衡二叉树。 常见的平衡二叉树有很多种,包括了AVL树、红黑树、数堆、伸展树。AVL树是最早提出来的自AVL树,当我们提到平衡二叉树时一般指的就是AVL树 左右平衡后就使得搜索时间复杂度能稳定在O(log2n)。

阿里:MySQL数据库规范

陌路散爱 提交于 2020-10-23 18:41:06
阿里:MySQL数据库规范 简介:基于阿里数据库设计规范扩展而来 设计规范 1.【推荐】字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循: 不是频繁修改的字段。 不是 varchar 超长字段,更不能是 text 字段。 正例:商品类目名称使用频率高,字段长度短,名称基本一成不变,可在相关联的表中冗余存 储类目名称,避免关联查询。 2.【推荐】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。 说明:如果预计2年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。 3.【推荐】id必须是主键,每个表必须有主键,且保持增长趋势的, 小型系统可以依赖于 MySQL 的自增主键,大型系统或者需要分库分表时才使用内置的 ID 生成器 4.【强制】id类型没有特殊要求,必须使用bigint unsigned,禁止使用int,即使现在的数据量很小。id如果是数字类型的话,必须是8个字节。参见最后例子 方便对接外部系统,还有可能产生很多废数据 避免废弃数据对系统id的影响 未来分库分表,自动生成id,一般也是8个字节 5.【推荐】字段尽量设置为 NOT NULL, 为字段提供默认值。 如字符型的默认值为一个空字符值串’’;数值型默认值为数值 0;逻辑型的默认值为数值 0; 6.【推荐】每个字段和表必须提供清晰的注释 7.【推荐】时间统一格式:

MySQL前缀索引上限案例分析

我只是一个虾纸丫 提交于 2020-10-22 00:02:08
一、案例分享 1.1 问题描述 以下一例报错是开发同学通过框架初始化创建一些表结构时出现的报错,我们需要重点关注“1071 Specified key was too long; max key length is 7671071 Specified key was too long; max key length is 767 bytes”这个提示。该报错告诉我们索引长度超过的额767,因过长而无法创建索引。这也是为什么经常在一些MySQL的SQL审批中,DBA同学会经常要求某个表的字段长度尽量不要超过191、某些表的字段长度不要超过255。 Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes in /var/www/html/includes/vendor/aura/sql/src/ExtendedPdo.php:748 Stack trace: #0 /var/www/html/includes/vendor/aura/sql/src/ExtendedPdo.php(748): PDOStatement->execute() #1

MyISAM 和 InnoDB 索引结构及其实现原理

て烟熏妆下的殇ゞ 提交于 2020-10-14 05:57:23
数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。 索引的实现通常使用B_TREE。 B_TREE索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据; 相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。 MyISAM引擎 使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址. 即:MyISAM索引文件和数据文件是分离的,MyISAM的索引文件仅仅保存数据记录的地址。 MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引, 如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。 MyISAM的索引方式也叫做“非聚集”的。 物理文件结构为: .frm文件:与表相关的元数据信息都存放在frm文件,包括表结构的定义信息等。 .myd(mysql data)文件:myisam存储引擎专用,用于存储myisam表的数据 .myi(mysql index)文件:myisam存储引擎专用,用于存储myisam表的索引相关信息 InnoDB引擎 也使用B+Tree作为索引结构,但是InnoDB的数据文件本身就是索引文件,叶节点data域保存了完整的数据记录。 这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。这种索引叫做