mysql索引

mysql杂记

巧了我就是萌 提交于 2020-04-07 19:23:18
问题未明确: decimal float double 具体原理和应用 datetime等时间类型 复合索引的最左前缀原则原理还是不太懂啊,需要学习一下算法了 sql的执行级别type没有进行仔细的研究 记笔记 时间戳函数 字符串转unix时间戳 insert into t1 values(9876543.21, 9876543.12); unix时间戳转字符串 select FROM_UNIXTIME(1496215980); 主键索引 增加和删除主键索引 alter table user1 add primary key (uid); 指定字段为主键时,会自动加主键索引 alter table user1 drop primary key; 查询所有索引 show index from user1; 删除主键之前必须删除自增长 增加索引 唯一索引 添加唯一索引 alter table user2 add UNIQUE (uid);  索引名默认使用列名  指定字段为unique时,会自动加唯一索引 删除唯一索引(普通索引也用这个删除) 普通索引 alter table user3 add key(uid); 来源: https://www.cnblogs.com/gengsc/p/6924867.html

Python学习笔记二——数据类型及数据操作

给你一囗甜甜゛ 提交于 2020-04-07 05:36:11
概要 : 基本语法 输出格式、 变量 、注释 数据类型 Numbers (数字)、String (字符串)、List (列表)、Tuple(元组)、Cictionary(字典) 及各个数据类型的常用方法和内置函数 、多维数组等 数据操作 切片操作 、回文算法 基本语法 - 输出格式 : Python的输出语法和Swift 的输出一样 1 # 输出 2 print("Hello Python") 注释 : Python中单行注释采用 # 开头。 python中多行注释使用三个单引号 ''' 或三个双引号 """ 变量 : Python中的变量不需要声明,变量的赋值操作既是变量声明和定义的过程。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建 Python允许你同时为多个变量赋值, 也可以为多个对象指定多个变量。例如: 1 a = b = c = 1 2 3 # 多变量赋值 4 a, b, c = 1, 2, "jun" 标准数据类型 有五个标准的数据类型: Numbers (数字) String (字符串) List (列表) Tuple(元组) Cictionary(字典) Number(数字) Number 是不可被改变的数据类型, 当你指定一个值时, Number 对象就会被创建 Python 支持四种不同的数值类型: int (有符号整型) long (长整型

Solr与MySQL查询性能对比

最后都变了- 提交于 2020-04-06 10:34:52
测试环境 本文简单对比下Solr与MySQL的查询性能速度。 测试数据量:10407608 Num Docs: 10407608 普通查询 这里对MySQL的查询时间都包含了从MySQL Server获取数据的时间。 在项目中一个最常用的查询,查询某段时间内的数据,SQL查询获取数据,30s左右 SELECT * FROM `tf_hotspotdata_copy_test` WHERE collectTime BETWEEN '2014-12-06 00:00:00' AND '2014-12-10 21:31:55'; 对collectTime建立索引后,同样的查询,2s,快了很多。 Solr索引数据: <!--Index Field for HotSpot--> <field name="CollectTime" type="tdate" indexed="true" stored="true"/> <field name="IMSI" type="string" indexed="true" stored="true"/> <field name="IMEI" type="string" indexed="true" stored="true"/> <field name="DeviceID" type="string" indexed="true" stored=

MyISAM与InnoDB两者之间怎么选择

痴心易碎 提交于 2020-04-06 09:21:47
1、MyISAM不支持事务,InnoDB是事务类型的存储引擎 当我们的表需要用到事务支持的时候,那肯定是不能选择MyISAM了。 2、MyISAM只支持表级锁,BDB支持页级锁和表级锁默认为页级锁,而InnoDB支持行级锁和表级锁默认为行级锁 表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许 MyISAM是表级锁定的存储引擎,它不会出现死锁问题 对于write,表锁定原理如下: 如果表上没有锁,在其上面放置一个写锁,否则,把锁定请求放在写锁队列中。 对于read,表锁定原理如下 : 如果表上没有写锁定,那么把一个读锁放在其上面,否则把锁请求放在读锁定队列中 当一个锁定被释放时,表可被写锁定队列中的线程得到,然后才是读锁定队列中的线程。这意味着,如果你在一个表上有许多更新,那么你的SELECT语句将等到所有的写锁定线程执行完。 行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。 行级锁是Mysql粒度最小的一种锁,它能大大的减少数据库操作的冲突,但是粒度越小实现成本也越大。 行 级锁可能会导致“死锁”,那到底是怎么导致的呢,分析原因:Mysql行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条 sql语句操作了主键索引,那么Mysql就会锁定这个主键索引

MyISAM与InnoDB两者之间怎么选择

六月ゝ 毕业季﹏ 提交于 2020-04-06 09:21:30
MyISAM与InnoDB两者之间怎么选择 1、MyISAM不支持事务,InnoDB是事务类型的存储引擎 当我们的表需要用到事务支持的时候,那肯定是不能选择MyISAM了。 2、MyISAM只支持表级锁,BDB支持页级锁和表级锁默认为页级锁,而InnoDB支持行级锁和表级锁默认为行级锁 表级锁:直接锁定整张表,在锁定期间,其他进程无法对该表进行写操作,如果设置的是写锁,那么其他进程读也不允许 MyISAM是表级锁定的存储引擎,它不会出现死锁问题 对于write,表锁定原理如下: 如果表上没有锁,在其上面放置一个写锁,否则,把锁定请求放在写锁队列中。 对于read,表锁定原理如下 : 如果表上没有写锁定,那么把一个读锁放在其上面,否则把锁请求放在读锁定队列中 当一个锁定被释放时,表可被写锁定队列中的线程得到,然后才是读锁定队列中的线程。这意味着,如果你在一个表上有许多更新,那么你的SELECT语句将等到所有的写锁定 线程执行完。 行级锁:只对指定的行进行锁定,其他进程还是可以对表中的其他行进行操作的。 行级锁是Mysql粒度最小的一种锁,它能大大的减少数据库操作的冲突,但是粒度越小实现成本也越大。 行级锁可能会导致“死锁”,那到底是怎么导致的呢,分析原因:Mysql行级锁并不是直接锁记录,而是锁索引。索引分为主键索引和非主键索引两种,如果一条sql语句操作了主 键索引

mysql索引原则

梦想的初衷 提交于 2020-04-06 03:54:41
设计原则 经常被用户条件查询的字段,创建索引 索引不是越多越好;索引占用磁盘空间,影响insert、update、delete性能 经常修改的表,不要建过多的索引;更新表数据时,索引也会进行微调或者更新,十分消耗系统资源 数据量小的表,不需要建索引;数据量小时查询本来就很快,但是建索引会对于索引结构的维护带来系统资源消耗 boolean值字段不需要建索引;比如deteleTag字段,只有0或者1的情况 唯一性字段建议建唯一索引;查询速度有明显提高 当排序是固定多个列时,在这些列上建组合索引 优化原则 避免使用 select * 范围查询索引失效。( > 、< 、between...and... 、<> 、!= 、like ) is null 、is not null 、or 索引失效 使用函数、计算等操作索引失效 组合索引最左原则。(建索引顺序与查询顺序要一致) 连接查询表之间的字符集与校对集要一致。( utf8 、utf8_bin) 来源: oschina 链接: https://my.oschina.net/u/4198095/blog/3217536

ElasticSearch快速学习

坚强是说给别人听的谎言 提交于 2020-04-03 12:10:10
一、ElasticSearch 介绍 官网链接 1、简介 ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式的 RESTful 风格的搜索和数据分析引擎。 Elasticsearch 是用 Java 语言开发的,并作为 Apache 许可条款下的开放源码发布,是一种流行的企业级搜索引擎。 ElasticSearch 能够达到实时搜索,稳定,可靠,快速,安装使用方便。 2、特性 存储:分布式的文档存储引擎,支持PB级数据。 查询和分析:分布式的搜索引擎和分析引擎。 可扩展:支持一主多从且扩容简易,只要cluster.name一致且在同一个网络中就能自动加入当前集群;也支持很多开源的第三方插件,如分词插件、同步插件、Hadoop插件、可视化插件等。 高可用:在一个集群的多个节点中进行分布式存储,索引支持shards和复制,即使部分节点down掉,也能自动进行数据恢复和主从切换。 RestfulAPI标准:通过http接口使用JSON格式进行操作数据。 数据类型丰富:数字、文本、地理位置、结构化、非结构化等。 3、使用场景 搜索领域:如百度、谷歌,全文检索等。 门户网站:访问统计、文章点赞、留言评论等。 广告推广:记录员工行为数据、消费趋势、员工群体进行定制推广等。 信息采集:记录应用的埋点数据、访问日志数据等,方便大数据进行分析。 二

mysql高性能索引

﹥>﹥吖頭↗ 提交于 2020-04-03 01:59:17
独立索引:   独立索引是指索引列不能是表达式的一部分,也不能是函数的参数    例1: SELECT actor_id FROM actor WHERE actor_id+1=5 --这种写法,就算在actor_id上建立了索引,也不起效    例2: SELECT .... WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col) <= 10 --这也是一种错误的写法 多列索引(联合索引)&选择合适的索引列顺序:   多列索引(Multiple-Column Indexes)也称为复合索引(composite index),也即同时对多个列建立索引。   什么时候用多列索引? 当出现服务器对多个索引做相交操作时(通常有多个AND条件),通常意味着需要一个包含所有相关列的多列索引,而不是多个独立的单列索引。 当服务器需要对多个索引做联合操作时(通常有多个OR条件),通常需要耗费大量CPU和内存资源在算法的缓存、排序和合并操作上。特别是当其中有些索引的选择性不高,需要合并扫描返回大量数据的时候。   多列索引的生效规则:   比如(a,b,c),abc都是拍好序的,在任意一段a的下面b都是排好序的,任何一段b下面c都是拍好序的。多列索引的生效原则是从前往后依次使用生效,如果中间某个索引没有使用,那么断点前面的索引部分起作用

索引上(4)

ぃ、小莉子 提交于 2020-03-30 11:23:26
索引 作用:提高数据查询的效率 常用索引模型 哈希表 有序数组 搜索树 哈希表 以键值对的形式存储,适合于只有等值查询的场景。 用一个哈希函数把 key 换算成一个确定的位置,然后把 value 这个位置的数组中。一个 key 会对应一个数组,数组中会有多个 value , value 并不是有序的。 查找时先通过哈希函数算出 key ,找到具体的数组,然后遍历数组,找到具体的位置。 有序数组 以有序数组形式存储,等值查询和范围查询场景中性能非常优秀,只适用于静态存储引擎。 仅仅看查询效率,有序数组就是最好的数据结构了,但是,在需要更新数据多的时候就麻烦了,你往中间插入一个记录就必须得挪动后面所有的记录,成本太高。 所以,有序数组索引只适用于静态存储引擎,比如你要保存2017年某个城市的所有人口信息,这类不会再修改的数据。 搜索树 以类似二叉树的多叉树来实现。 二叉搜索树:每个节点的左儿子小于父节点,父节点又小于右儿子。 多叉树:每个节点有多个儿子,儿子之间的大小保证从左到右。 在 MySQL 中,索引是在存储引擎层实现的,所有并没有同一的索引标准,即不同存储引擎的索引的工作方式并不一样。而即使多个存储引擎支持同一种类型的索引,其底层的实现也可能不同。 InnoDB 使用了 B+ 树索引模型,所有的数据都是存储在 B+ 树中的。每一个索引在 InnoDB 里面对应一棵 B+ 树

索引下(5)

牧云@^-^@ 提交于 2020-03-30 11:23:02
在下列表T中,执行 select * from T where k betwee 3 and 5; ,需要执行几次树的搜索操作? mysql> create table T ( ID int primary key, k int NOT NULL DEFAULT 0, s varchar(16) NOT NULL DEFAULT '', index k(k)) engine=InnoDB; insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff'),(700,7,'gg'); SQL 语句执行流程: 在k索引树上找到k值为3的记录,取得ID为300 再到ID索引树上找到ID为300对应的R3记录 在k索引树上找到k值为5的记录,取得ID为500 再回到ID索引树上找到ID为500对应的R4记录 在k索引树上找到k值为6的记录,不符合条件,结束循环 在这个过程中,回到主键索引搜索树的过程,成为回表。 在这个例子中,由于查询结果所需要的数据只有主键索引上有,所以不得不回表。如果执行的语句是 select ID from T where k between 3 and 5; ,只需要查询ID的值,而k索引树上有这个值,不需要回表,索引k已经覆盖了查询所需要的值,成为 覆盖索引