精华内容
下载资源
问答
  • 正股权证是什么意思?想了解更多股票权证,建议关注QR量化投资社区,下面让我们了解一下股票权证吧! 股票权证是什么意思? 权证是一种股票期权,在港交所叫“涡轮”(warrant)。股票权证是什么意思?权证是持有...

    在这个全民炒股的时代,大家对于股票的热情有增无减。不过,对于股民来说,一定要掌握更多股票知识,才能够赢在股海哦!那么,股票权证是什么意思?正股和权证是什么意思?想了解更多股票权证,建议你关注QR量化投资社区,下面让我们了解一下股票权证吧!

    股票权证是什么意思?

    权证是一种股票期权,在港交所叫“涡轮”(warrant)。股票权证是什么意思?权证是持有人在规定期间内或特定到期日,有权按约定价格(行权价)向发行人购买或出售标的股票,或以现金结算方式收取结算差价的有价证券。股票权证是什么意思?权证可分为认购权证和认沽权证。股票权证是什么意思?持有认购权证者,可在规定期间内或特定到期日,向发行人购买标的股票,与目前流行的可转债有权转换成股票相类似。股票权证是什么意思?而持有认沽权证者的权利是能以约定价格卖出标的股票。股票权证是什么意思?更多股票权证知识,可以通过QR技术分析社区来了解。

    正股和权证是什么意思?

    正股是指权证对应的股票,代表着持有者对股份公司的所有权。正股和权证是什么意思?正股,就是权证对应的股票。股票权证是什么意思?权证就是对应正股的,比如现在的南航权证对应的就是南方航空,南方航空就是正股。股票权证是什么意思?所以以下就是正股又是股票的定义。正股和权证是什么意思?股票是股份有限公司在筹集资本时向出资人发行的股份凭证,代表着其持有者(即股东)对股份公司的所有权。股票权证是什么意思?权证(sharewarrant),是指基础证券发行人或其以外的第三人发行的,约定持有人在规定期间内或特定到期日,有权按约定价格向发行人购买或出售标的证券,或以现金结算方式收取结算差价的有价证券。正股和权证是什么意思?权证价值由两部分组成,一是内在价值,即标的股票与行权价格的差价;二是时间价值,代表持有者对未来股价波动带来的期望与机会。股票权证是什么意思?在其他条件相同的情况下,权证的存续期越长,权证的价格越高;美式权证由于在存续期可以随时行权,比欧式权证的相对价格要高。

    以上是一篇关于股票权证是什么意思以及正股和权证是什么意思方面的介绍。如果想要了解更多的股票权证知识,那么敬请关注QR量化社区,这里有更多的股票权证知识等着你来学习哦!你还可以跟很多股票高手交流,让你赢在股海!

    展开全文
  • 展开全部搞笑bai的意思。指有意的作出一du些zhi举dao动或者发表一些可笑的言论来引人发笑版,以达到搞权笑犯贫的目的。笑人天生表情的一部分,它没有人主观意识的驱动,属于自发行为。而搞笑,则人类主动去...

    展开全部

    是搞笑bai的意思。

    指有意的作出一du些zhi举dao动或者发表一些可笑的言论来引人发笑版,以达到搞权笑犯贫的目的。笑是人天生表情的一部分,它没有人主观意识的驱动,是属于自发行为。

    而搞笑,则是人类主动去寻求快乐,更注重从生活和平常中主动发掘快乐,以此作为工作之外的放松和调节。它比笑更让人具有活力和创造力。

    扩展资料:

    1、居家

    既然是“含蓄而充满机智的”,就绝对不是打扮猴子装恐龙这么简单。你必须要由心出发,思绪要走的比别人快,用巧思安排布下诱因,让你的听众随着你主导的思路渐渐且自发性的领悟,而发出会心的一笑。

    不是会讲笑话就算懂得幽默,要知道笑话只是一条条钓好的鱼,并不能代表你是个钓鱼高手。幽默不是天生的,而是可以后天养成的,头脑灵活度、思想多元化、笑话库存的累积都会使你更有效的培养幽默感。

    2、滑稽

    滑稽作为一种审美现象是古已有之的。它一直和美学中的喜剧传统相关联。我国古代喜剧正是从俳优、滑稽戏发展起来的。

    西方最早的喜剧——古希腊的喜剧也是在民间滑稽表演的基础上发展起来的,故而历来的美学家多以喜剧为研究滑稽的材料。有的以喜剧包含滑稽,也有的以滑稽来包容喜剧。

    参考资料来源:百度百科-搞笑

    展开全文
  • 文章来源:程序员小灰作者:康哥什么是索引?假设我们有一张数据表 employee(员工表),该表有三个字段(列),分别name、age address。假设表employee有上万行数据(这公司还真大),现在需要从这个表中查找出所有...

    ac44067f4107d4b898a3d5d0b47b9c8e.png

    8351a1e8884f02b9095b7dd64b0313ea.png

    文章来源:程序员小灰

    作者:康哥

    什么是索引?

    假设我们有一张数据表 employee(员工表),该表有三个字段(列),分别是name、age 和address。假设表employee有上万行数据(这公司还真大),现在需要从这个表中查找出所有名字是‘ZhangSan’的雇员信息,你会快速的写出SQL语句:

    select name,age,address from employee where name='ZhangSan'

    如果数据库还没有索引这个东西,一旦我们运行这个SQL查询,查找名字为ZhangSan的雇员的过程中,究竟会发生什么?数据库不得不在employee表中的每一行查找并确定雇员的名字(name)是否为‘ZhangSan’。

    由于我们想要得到每一个名字为ZhangSan的雇员信息,在查询到第一个符合条件的行后,不能停止查询,因为可能还有其他符合条件的行,所以必须一行一行的查找直到最后一行——这就意味数据库不得不检查上万行数据才能找到所有名字为ZhangSan的雇员。这就是所谓的全表扫描(参见前文“执行计划”中type=ALL),显然这种模式效率太慢,技术可能觉得无所谓,业务会拿刀砍你。

    你会想为如此简单的事情做全表扫描效率欠佳——数据库是不是应该更聪明一点呢?这就像用人眼从头到尾浏览整张表,很慢也不优雅,“索引”派上用场的时候到了,使用索引的全部意义就是:通过缩小一张表中需要查询的记录/行的数目来加快搜索的速度。

    在关系型数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单(定义真特么拗口)。大白话意思是索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

    一个索引是存储的表中一个特定列的值数据结构。索引是在表的列上创建。要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中。请牢记这一点:索引是一种数据结构。一个好的数据库表设计,从一开始就应该考虑添加索引,而不是到最后发现慢SQL了,影响业务了才来补救。其实我在工作经历当中,由于新建表或新加字段后,忘记添加索引也造成了多次生产事故,记忆犹新!!!

    在没有GUI工具的情况下,可以使用以下命令查看索引:

    af3417be4542309cdb310199bb6e5143.png

    上述ad_article表中有两个索引,Key_name中有显示:

    -  PRIMARY主键索引,Seq_in_index索引序号为1,从1开始,Collation为“A”表示升序(或NULL无分类),对应字段是id

    -    idx_cid是自建索引,由cid、available、id三个字段组成,分别对应序号1,2,3

    表中大部分信息都挺好理解的,倒是Index_type=BTREE这块内容很多人不懂其意思,其实通过GUI工具创建索引时也会有BTREE 的显示,先着重了解一下。

    BTREE

    在计算机数据结构(不懂数据结构的自行充电)体系中,为了加速查找的速度,常见的数据结构有两种:

    -     Hash哈希结构,例如Java中的HashMap,这种数据组织结构可以让查询/插入/修改/删除的平均时间复杂度都为O(1);

    -    Tree 树 结构 , 这种数据组织结构可以让查询/插入/修改/删除的平均时间复杂度都为O(log(n));

    注:时间复杂度O是数据结构课程中的基础内容,不明白同学的自行充电。O(1)的意思是不管N多大其速度都是恒定的,O(log(N))的意思是不管N多大,都要花费N的对数次时间。

    问题来了:即然不管读还是写,Hash这种类型比Tree树这种类型都要更快一些,那为什么MySQL的开发者既使用Hash类型做为索引,又使用了BTREE呢?

    话说回来,还是跟SQL应用场景有关系,前文中我们找"ZhangSan"用户的SQL:

    select name,age,address from employee where name='ZhangSan'

    确实用HASH索引更快,因为每次都只查询一条信息(重名的雇员姓名也才几条而已),但实际上业务对于SQL的应用场景是:

    -      orderby 需要排个序

    -      groupby 还要分个组

    -     还要比较大小 大于或小于等等

    这种情况下如果继续用HASH类型做索引结构,其时间复杂度会从O(1)直接退化为O(n),相当于全表扫描了,而Tree的特性保证了不管是哪种操作,依然能够保持O(log(n))的高效率,有种我自岿然不动的赶脚!所以抛开应用场景谈设计其实是耍流浪(比如很多java程序员被安利阿里的fastjson比jackson快,故而抛弃jackson一样),实际上MySQL中也支持HASH类型的索引,但不是主流。

    那MySQL中的BTREE和TREE又有啥联系与区别呢?先来看看传统的二叉树:

    e35603b1d73f7b0bb075d200954656da.png

    二叉树是大家熟知的一种树,用它来做索引行不行,可以是可以,但有几个问题:

    -      如果索引数据很多,树的层次会很高(只有左右两个子节点),数据量大时查询还是会慢

    -     二叉树每个节点只存储一个记录,一次查询在树上找的时候花费磁盘IO次数较多

    所以它并不适合直接拿来做索引存储,算法设计人员在二叉树的基础之上进行了变种,引入了BTREE的概念(详情可自行查询)

    09428c492fbdfa1e4863958e81ffdded.png

    如上图可知BTREE有以下特点:

    -      不再是二叉搜索,而是N叉搜索,树的高度会降低,查询快

    -      叶子节点,非叶子节点,都可以存储数据,且可以存储多个数据

    -     通过中序遍历,可以访问树上所有节点

    BTREE被作为实现索引的数据结构被创造出来,是因为它能够完美的利用“局部性原理”,其设计逻辑是这样的:

    -      内存读写快,磁盘读写慢,而且慢很多

    -      磁盘预读:磁盘读写并不是按需读取,而是按页预读,一次会读一页的数据,每次加载一些看起来是冗余的数据,如果未来要读取的数据就在这一页中,可以避免未来的磁盘读写,提高效率(通常,一页数据是4K)

    -     局部性原理:软件设计要尽量遵循“数据读取集中”与“使用到一个数据,大概率会使用其附近的数据”,这样磁盘预读能充分提高磁盘IO效能

    早先的MySQL就是使用的BTREE做为索引的数据结构,随着时间推移,B树发生了较多的变种,其中最常见的就是B+TREE变种,现在MySQL用的就是这种,示意如下:

    fe2b581e3470c2e361f5856bd0fd96d7.png

    B+TREE改进点及优势所在:

    -      仍然是N叉树,层级小,非叶子节点不再存储数据,数据只存储在同一层的叶子节点上,B+树从根到每一个节点的路径长度一样,而B树不是这样

    -      叶子之间,增加了链表(图中红色箭头指向),获取所有节点,不再需要中序遍历,使用链表的next节点就可以快速访问到

    -      范围查找方面,当定位min与max之后,中间叶子节点,就是结果集,不用中序回溯(范围查询在SQL中用得很多,这是B+树比B树最大的优势)

    -      叶子节点存储实际记录行,记录行相对比较紧密的存储,适合大数据量磁盘存储;非叶子节点存储记录的PK,用于查询加速,适合内存存储

    -     非叶子节点,不存储实际记录,而只存储记录的KEY的话,那么在相同内存的情况下,B+树能够存储更多索引

    可以来初步计算一下:假设key、子树节点指针均占用4B,则B树一个节点占用4 + 4 = 8B,一页页面大小4KB,则N = 4 * 1024 / 8B = 512,一个512叉的B树,1000w的数据,深度最大 log(512/2)(10^7) 约等于4。对比二叉树如AVL的深度为log(2)(10^7) 约为24,相差了5倍以上!

    假如一个节点大小是4KB,一个KEY有8字节,一页可以存4000/8=500个KEY,根据N叉树特点,就算一层500叉节点,则:

    第一层树:1个节点,1*500KEY , 大小4K

    第二层树:500节点 500*500=25万个KEY,500*4K=2M

    第三层树:500 * 500节点 500*500*500=1.2亿KEY,500*500*4K=1G

    如果没算错,1G空间,只用三层树结构,可以存1.2亿行数据的KEY,B+树牛掰不?

    所以B+TREE索引只用占用很少的内存空间,却大大提升了查询效率(不论是单个查询、范围查询还是有序性查询),并且还减少了磁盘读写,所以好的算法与数据结构是可以省钱的。

    说完BTREE,在'showindex from ad_article'结果集中有一列为Cardinality的值,它的作用也非常的大,称之为:索引基数

    Cardinality 索引基数

    索引基数简单的说就是:你索引列的唯一值的个数,如果是复合索引就是唯一组合的个数。这个数值将会作为MySQL优化器对语句执行计划进行判定时依据。如果唯一性太小,那么优化器会认为这个索引对语句没有太大帮助,而不使用索引。cardinality值越大,就意味着,使用索引能排除越多的数据,执行也更为高效。

    举个简单例子来说明:比如有一张表有A、B、C列,数据情况如下:

    A    B    C

    1    1    1

    1    1    2

    1    2    1

    1    2    2

    2    1    1

    2    1    2

    2    2    1

    2    2    2

    -      如果对A列进行索引,那么它的cardinality基数值为2,因为只有1,2两种值

    -      如果对A、B两列做复合索引,那么它的cardinality基数值为4,因为值的组合为(11),(1 2),(2 1),(2 2)

    -     如果对A、B、C做复合索引,则它的cardinality基数值为8

    当有多个索引可用时,mysql会自动依据cardinality大的值来进行SQL索引选择优化。如果现在再问你“为什么数据库都有PK”,你怎么答?因为PK的数据均不一样啊,做索引了后查询起来效果才快啊,因为cardinality值很高,是不是?另一种问法常见于判断题,问你“数据库索引通常要放在选择性差的列上”,你以前可能还不明白为什么,其背后逻辑就是索引的cardinality值啊,选择性差意味着重复数据少,索引才高效嘛。

    但回到我们自己的例子,数据库中有数据值61行,但是cardinality=59并不准确,是因为它不会自动更新,需要通过analyzetable来进行更新,示例如下:

    mysql>analyze local table ad_article;

    优化以后结果为:

    deade041a468d5c25e448b2f93b68f32.png

    索引基数更加准确一些了。

    索引类型

    MySQL中有以下索引类型:

    UNIQUE唯一索引 该索引其含义是被标定义唯一索引的列,不允许出现重复的数据, 但可以有NULL值。举例来讲,假如有A、B两个字段,建立唯一索引:

    A  B

    1  1

    1  2

    1  1  // 这一行数据无法插入,因为与第一条数据重复,数据库底层报错DuplicateKeyException 1 1

    唯一索引有利有弊,好处是:如果你的程序不好处理界面端的重复提交,或者因为数据的重复导致程序出错误,可以通过创建唯一索引来解决问题,当然不要为了设置唯一索引而设置索引,索引还是要有用处的。其次在设置了唯一索引时,万一真要发生变更,支持重复数据怎么办?MySQL提供了两种补救办法:

    -      自动替换为新的值,可以用ONDUPLICATE KEY UPDATE xxx= VALUES(xxx)

    -     忽略插入是 insert ignore into

    INDEX普通索引允许出现相同的索引内容,平时创建的索引通常就是普通索引,利用提升查询数据性能

    PRIMARY KEY主键索引 不允许出现相同的值,且不能为NULL值,一个表只能有一个primary_key索引,常见于ID字段

    fulltext index 全文索引 上述三种索引都是针对列的值发挥作用,但全文索引,可以针对值中的某个单词,比如一篇文章中的某个词,然而并没有什么卵用,因为只有myisam引擎以及英文支持,并且效率让人不敢恭维,要全文搜索还是建议使用Luence、Solr、ES等方案,更专业且强大一些。

    索引的创建与使用

    ALTER TABLE 适用于表创建完毕之后再添加

    ALTERTABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)

    CREATE INDEX可对表增加普通索引或UNIQUE索引

    CREATE INDEXindex_name ON table_name (column_list)

    CREATE UNIQUE INDEX index_name ON table_name(column_list)

    另外,还可以在建表时添加:

    CREATE TABLE mytable (

      ... //中间字段忽略

      PRIMARY KEY (`id`),

      UNIQUE KEY `unique1`(`username`), -- 索引名称,可要可不要,不要就是和列名一样

      KEY `index1` (`nickname`),

      FULLTEXT KEY `intro` (`intro`)

    ) ENGINE=MyISAMAUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='测试表';

    一张表字段有多有少,该在哪些列上创建索引呢?其实新建索引也是有一定的原则的,建什么索引,建在哪些字段上,有以下一些原则与技巧可参考:

    -      在维度高或选择性差的列创建索引 说人话就是数据列中不重复值出现的个数,这个数量越高,维度就越高(如数据表中存在8行数据a,b ,c,d,a,b,c,d这个表的维度为4)。要为维度高的列创建索引,如性别和年龄,那年龄的维度就高于性别,性别这样的列不适合创建索引,因为维度过低,只有两三种值。

    -      对 where,on,group by,order by  中出现的列使用索引,索引一般多设置在条件列上,显示列通常少设置索引

    -      对较小的数据列使用索引 ,这样会使索引文件更小,同时内存中也可以装载更多的索引键,例如有一个字段存文本内容,新闻、资讯类那种的,内容超大,你为它设置索引就是脑袋被门夹了。

    -     为较长的字符串使用前缀索引,比如有个姓名字段firstname,varchar(50)个长,可以用

    alter table employee add key(firstname(5))

    来设置前缀索引,为什么这里只取前5个字符进行索引呢?是因为可以通过

    select 1.0 *count(distinct left(firstname,5)) / count(*) from employee

    算法得到前几个字母对标数据的覆盖率,覆盖率超过31%黄金值就可以使用前缀索引。

    -      使用组合索引,可以减少文件索引大小,在使用时速度要优于多个单列索引

    -     索引也不是越多越好,不要过多创建索引,除了增加额外的磁盘空间外,对于DML操作的速度影响很大,因为其每增删改一次就得从新建立索引

    说了创建索引,接下来就是使用索引,如果认真研读过前面的“执行计划”,SQL用到哪些索引,用了索引没有一目了然,但是有一些情况就是不会走索引,先来一些简单的示例说明:

    SELECT sname FROM stu WHERE age+10=30;  --不会使用索引,因为有索引列参与了计算

    SELECT sname FROM stu WHERE LEFT(`date`,4) <1990; -- 不会使用索引,因为使用了函数运算,原理与上面相同

    SELECT * FROM table WHERE uname LIKE'前缀%' -- 走索引

    SELECT * FROM table WHERE uname LIKE "%关键字%"-- 不走索引

    SELECT * FROM table WHERE a=1 -- a列为char字符类型,用整数找不走索引,a='1'才走索引

    SELECT * FROM table WHEREdname='xxx' or loc='xx' or deptno=45

    -- 如果条件中有or,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引,建议大家尽量避免使用or关键字

    -- 正则表达式,regexp不走索引

    -- 表中数据不多,只有几十几百条,MySQL评估使用全表扫描要比使用索引快,也不使用索引,不要大惊小怪

    以上都是单表查询操作,多表关联查询才是业务开发的“常见姿势”,假如有一个查询:

    select a,b,c from A join B join C on a=b and b=c;

    三表join关联,假设三个表每个均有2000条记录,在没有添加索引时,则结果会进行2000*2000*2000=8000000000一共80亿次检索(因为一不小心就是一个笛卡尔乘积的恐怖扫描),只有在加了索引后,第一张表会全表扫描2000次,其余的关联表基本是range区间扫描,这样扫描次数就会降低很多很多,并且关联表时,建议多用leftjoin以少联多减少扫描次数。

    有些时候发现明明创建了索引,但是因为一些原因并没有使用索引,mysql支持强制走索引,比如:

    select* from table where a=1 force index(PRI,my_index) --强制主键索引和自己创建的索引

    与之相反,还可以禁止某个索引:

    select* from table where a=1 ignore index(PRI,my_index) --禁止使用索引

    复合索引执行顺序

    复合索引的执行顺序是有讲究的,还是以之前的案例举例:

    68102b3b4c43ce7bab06e94f294675b5.png

    表有一个主键索引及一个复合索引,复合索引名称:idx_cid,字段顺序分别是:cid,available及id

    只用cid执行分析:

    b17ccc2c11ae0e24f0f8259bb41a2839.png

    结果显示用到了idx_cid,接下来再看第二个字段的分析:

    396004b7b8eb98c07b511edddfb063f8.png

    没有走idx_cid索引,全表扫描,接下来再看第三个的分析:

    6bd61fcd1afe5b256e74f137523e9d59.png

    因为id本身就是主键,所以也不会走idx_cid索引,而是走主键索引,假设id不是主键索引,则也不会走idx_cid索引。

    接下来再测试两两组合,先看cid +available组合:

    f5426fdbda8321ca9aabfc204c449b96.png

    结果显示用到了idx_cid,再看cid+id组合:

    5798c7e2e049e3b72d1d500b0958d272.png

    结果显示也用到了idx_cid,再看available+id组合:

    5264b5e1178534463a919dc7a0698d5e.png

    结果是走的主键索引,并没有走idx_cid复合索引,于是结果很清晰了,MySQL中的复合索引有顺序,且很重要,查询条件的顺序不能随意乱写。假设A、B、C三个字段索引按A+B+C顺序创建的索引:

    A --走索引

    B --不走索引

    C --不走索引

    A + B 或 B + A -- 走索引

    B + C 或 C + B -- 不走索引

    A + B + C 或 B + C + A 或 C + B + A --走索引

    小结:在复合索引中,索引第一位的column很重要,只要查询语句包含了复合索引的第一个条件,基本上就会使用到该复合索引(可能会使用其他索引)。在建复合索引的时候应该按照column的重要性从左往右建。

    索引的坑

    既然索引这么好,我们是不是应该尽可能多用索引呢?并不是。

    首先,不要盲目的创建索引,应只为那些查询操作频繁的列创建索引,创建索引会使查询操作变得更加快速,但是会降低增加、删除、更新操作的速度,因为执行这些操作的同时会对索引文件进行重新排序或更新;其次,在互联网应用中,查询的语句远远大于DML的语句,为一个大表(比如千万级数据)新建索引时是一个需要特别慎重的事情,经常出现“翻车”导致“车毁人亡”的事故,为什么?因为线上系统在被人使用,如果这时候开发或者运维人员执行一个创建索引的语句,容易导致表被锁死,所有操作排队无法被响应,时间一长容易导致业务崩溃,形成链式连锁反应,让业务蒙受巨大损失。百万或千万级数据库,大表加索引有一个比较好的方法:online-schema-change,有兴趣可自行网上搜索,此文不再赘述。好了,关于MySQL索引,我们就介绍到这里,记得给个 “在看” 哦~~~

    876a67251db855a065dcbb563eb725a3.png

    老表Pro已经满了

    所以大家加老表Max吧

    每日留言

    说说你最近遇到的一个编程问题

    或者新学的一个小技巧?

    (字数不少于15字)d66f187daf0de1b9ae32d679e786d13f.png

    完整Python基础知识要点

    Python小知识 | 这些技能你不会?(一)Python小知识 | 这些技能你不会?(二)Python小知识 | 这些技能你不会?(三)Python小知识 | 这些技能你不会?(四)

    近期推荐阅读:

    【1】整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了【2】【终篇】Pandas中文官方文档:基础用法6(含1-5)觉得不错就点一下“在看”吧 598512c13a7e3d4c9e998ccb27b219c9.gif
    展开全文
  • 文章来源:程序员小灰作者:康哥什么是索引?假设我们有一张数据表 employee(员工表),该表有三个字段(列),分别name、age address。假设表employee有上万行数据(这公司还真大),现在需要从这个表中查找出所有...

    831abf94d6f6697d26b282d2c4721022.png

    2807a6e6b6e2067ac2808c8d1f738068.png

    文章来源:程序员小灰

    作者:康哥

    什么是索引?

    假设我们有一张数据表 employee(员工表),该表有三个字段(列),分别是name、age 和address。假设表employee有上万行数据(这公司还真大),现在需要从这个表中查找出所有名字是‘ZhangSan’的雇员信息,你会快速的写出SQL语句:

    select name,age,address from employee where name='ZhangSan'

    如果数据库还没有索引这个东西,一旦我们运行这个SQL查询,查找名字为ZhangSan的雇员的过程中,究竟会发生什么?数据库不得不在employee表中的每一行查找并确定雇员的名字(name)是否为‘ZhangSan’。

    由于我们想要得到每一个名字为ZhangSan的雇员信息,在查询到第一个符合条件的行后,不能停止查询,因为可能还有其他符合条件的行,所以必须一行一行的查找直到最后一行——这就意味数据库不得不检查上万行数据才能找到所有名字为ZhangSan的雇员。这就是所谓的全表扫描(参见前文“执行计划”中type=ALL),显然这种模式效率太慢,技术可能觉得无所谓,业务会拿刀砍你。

    你会想为如此简单的事情做全表扫描效率欠佳——数据库是不是应该更聪明一点呢?这就像用人眼从头到尾浏览整张表,很慢也不优雅,“索引”派上用场的时候到了,使用索引的全部意义就是:通过缩小一张表中需要查询的记录/行的数目来加快搜索的速度。

    在关系型数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单(定义真特么拗口)。大白话意思是索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。

    一个索引是存储的表中一个特定列的值数据结构。索引是在表的列上创建。要记住的关键点是索引包含一个表中列的值,并且这些值存储在一个数据结构中。请牢记这一点:索引是一种数据结构。一个好的数据库表设计,从一开始就应该考虑添加索引,而不是到最后发现慢SQL了,影响业务了才来补救。其实我在工作经历当中,由于新建表或新加字段后,忘记添加索引也造成了多次生产事故,记忆犹新!!!

    在没有GUI工具的情况下,可以使用以下命令查看索引:

    e32513539ae65be10189472c6dea447d.png

    上述ad_article表中有两个索引,Key_name中有显示:

    -  PRIMARY主键索引,Seq_in_index索引序号为1,从1开始,Collation为“A”表示升序(或NULL无分类),对应字段是id

    -    idx_cid是自建索引,由cid、available、id三个字段组成,分别对应序号1,2,3

    表中大部分信息都挺好理解的,倒是Index_type=BTREE这块内容很多人不懂其意思,其实通过GUI工具创建索引时也会有BTREE 的显示,先着重了解一下。

    BTREE

    在计算机数据结构(不懂数据结构的自行充电)体系中,为了加速查找的速度,常见的数据结构有两种:

    -     Hash哈希结构,例如Java中的HashMap,这种数据组织结构可以让查询/插入/修改/删除的平均时间复杂度都为O(1);

    -    Tree 树 结构 , 这种数据组织结构可以让查询/插入/修改/删除的平均时间复杂度都为O(log(n));

    注:时间复杂度O是数据结构课程中的基础内容,不明白同学的自行充电。O(1)的意思是不管N多大其速度都是恒定的,O(log(N))的意思是不管N多大,都要花费N的对数次时间。

    问题来了:即然不管读还是写,Hash这种类型比Tree树这种类型都要更快一些,那为什么MySQL的开发者既使用Hash类型做为索引,又使用了BTREE呢?

    话说回来,还是跟SQL应用场景有关系,前文中我们找"ZhangSan"用户的SQL:

    select name,age,address from employee where name='ZhangSan'

    确实用HASH索引更快,因为每次都只查询一条信息(重名的雇员姓名也才几条而已),但实际上业务对于SQL的应用场景是:

    -      orderby 需要排个序

    -      groupby 还要分个组

    -     还要比较大小 大于或小于等等

    这种情况下如果继续用HASH类型做索引结构,其时间复杂度会从O(1)直接退化为O(n),相当于全表扫描了,而Tree的特性保证了不管是哪种操作,依然能够保持O(log(n))的高效率,有种我自岿然不动的赶脚!所以抛开应用场景谈设计其实是耍流浪(比如很多java程序员被安利阿里的fastjson比jackson快,故而抛弃jackson一样),实际上MySQL中也支持HASH类型的索引,但不是主流。

    那MySQL中的BTREE和TREE又有啥联系与区别呢?先来看看传统的二叉树:

    d368c9800555c9a2699fcb5122c15157.png

    二叉树是大家熟知的一种树,用它来做索引行不行,可以是可以,但有几个问题:

    -      如果索引数据很多,树的层次会很高(只有左右两个子节点),数据量大时查询还是会慢

    -     二叉树每个节点只存储一个记录,一次查询在树上找的时候花费磁盘IO次数较多

    所以它并不适合直接拿来做索引存储,算法设计人员在二叉树的基础之上进行了变种,引入了BTREE的概念(详情可自行查询)

    5bf6868c18bd5fdf5e1715b3faec78a8.png

    如上图可知BTREE有以下特点:

    -      不再是二叉搜索,而是N叉搜索,树的高度会降低,查询快

    -      叶子节点,非叶子节点,都可以存储数据,且可以存储多个数据

    -     通过中序遍历,可以访问树上所有节点

    BTREE被作为实现索引的数据结构被创造出来,是因为它能够完美的利用“局部性原理”,其设计逻辑是这样的:

    -      内存读写快,磁盘读写慢,而且慢很多

    -      磁盘预读:磁盘读写并不是按需读取,而是按页预读,一次会读一页的数据,每次加载一些看起来是冗余的数据,如果未来要读取的数据就在这一页中,可以避免未来的磁盘读写,提高效率(通常,一页数据是4K)

    -     局部性原理:软件设计要尽量遵循“数据读取集中”与“使用到一个数据,大概率会使用其附近的数据”,这样磁盘预读能充分提高磁盘IO效能

    早先的MySQL就是使用的BTREE做为索引的数据结构,随着时间推移,B树发生了较多的变种,其中最常见的就是B+TREE变种,现在MySQL用的就是这种,示意如下:

    723cbc754d4147b9788b96fe9d5b86eb.png

    B+TREE改进点及优势所在:

    -      仍然是N叉树,层级小,非叶子节点不再存储数据,数据只存储在同一层的叶子节点上,B+树从根到每一个节点的路径长度一样,而B树不是这样

    -      叶子之间,增加了链表(图中红色箭头指向),获取所有节点,不再需要中序遍历,使用链表的next节点就可以快速访问到

    -      范围查找方面,当定位min与max之后,中间叶子节点,就是结果集,不用中序回溯(范围查询在SQL中用得很多,这是B+树比B树最大的优势)

    -      叶子节点存储实际记录行,记录行相对比较紧密的存储,适合大数据量磁盘存储;非叶子节点存储记录的PK,用于查询加速,适合内存存储

    -     非叶子节点,不存储实际记录,而只存储记录的KEY的话,那么在相同内存的情况下,B+树能够存储更多索引

    可以来初步计算一下:假设key、子树节点指针均占用4B,则B树一个节点占用4 + 4 = 8B,一页页面大小4KB,则N = 4 * 1024 / 8B = 512,一个512叉的B树,1000w的数据,深度最大 log(512/2)(10^7) 约等于4。对比二叉树如AVL的深度为log(2)(10^7) 约为24,相差了5倍以上!

    假如一个节点大小是4KB,一个KEY有8字节,一页可以存4000/8=500个KEY,根据N叉树特点,就算一层500叉节点,则:

    第一层树:1个节点,1*500KEY , 大小4K

    第二层树:500节点 500*500=25万个KEY,500*4K=2M

    第三层树:500 * 500节点 500*500*500=1.2亿KEY,500*500*4K=1G

    如果没算错,1G空间,只用三层树结构,可以存1.2亿行数据的KEY,B+树牛掰不?

    所以B+TREE索引只用占用很少的内存空间,却大大提升了查询效率(不论是单个查询、范围查询还是有序性查询),并且还减少了磁盘读写,所以好的算法与数据结构是可以省钱的。

    说完BTREE,在'showindex from ad_article'结果集中有一列为Cardinality的值,它的作用也非常的大,称之为:索引基数

    Cardinality 索引基数

    索引基数简单的说就是:你索引列的唯一值的个数,如果是复合索引就是唯一组合的个数。这个数值将会作为MySQL优化器对语句执行计划进行判定时依据。如果唯一性太小,那么优化器会认为这个索引对语句没有太大帮助,而不使用索引。cardinality值越大,就意味着,使用索引能排除越多的数据,执行也更为高效。

    举个简单例子来说明:比如有一张表有A、B、C列,数据情况如下:

    A    B    C

    1    1    1

    1    1    2

    1    2    1

    1    2    2

    2    1    1

    2    1    2

    2    2    1

    2    2    2

    -      如果对A列进行索引,那么它的cardinality基数值为2,因为只有1,2两种值

    -      如果对A、B两列做复合索引,那么它的cardinality基数值为4,因为值的组合为(11),(1 2),(2 1),(2 2)

    -     如果对A、B、C做复合索引,则它的cardinality基数值为8

    当有多个索引可用时,mysql会自动依据cardinality大的值来进行SQL索引选择优化。如果现在再问你“为什么数据库都有PK”,你怎么答?因为PK的数据均不一样啊,做索引了后查询起来效果才快啊,因为cardinality值很高,是不是?另一种问法常见于判断题,问你“数据库索引通常要放在选择性差的列上”,你以前可能还不明白为什么,其背后逻辑就是索引的cardinality值啊,选择性差意味着重复数据少,索引才高效嘛。

    但回到我们自己的例子,数据库中有数据值61行,但是cardinality=59并不准确,是因为它不会自动更新,需要通过analyzetable来进行更新,示例如下:

    mysql>analyze local table ad_article;

    优化以后结果为:

    da874157977a199a66e32f9916903486.png

    索引基数更加准确一些了。

    索引类型

    MySQL中有以下索引类型:

    UNIQUE唯一索引 该索引其含义是被标定义唯一索引的列,不允许出现重复的数据, 但可以有NULL值。举例来讲,假如有A、B两个字段,建立唯一索引:

    A  B

    1  1

    1  2

    1  1  // 这一行数据无法插入,因为与第一条数据重复,数据库底层报错DuplicateKeyException 1 1

    唯一索引有利有弊,好处是:如果你的程序不好处理界面端的重复提交,或者因为数据的重复导致程序出错误,可以通过创建唯一索引来解决问题,当然不要为了设置唯一索引而设置索引,索引还是要有用处的。其次在设置了唯一索引时,万一真要发生变更,支持重复数据怎么办?MySQL提供了两种补救办法:

    -      自动替换为新的值,可以用ONDUPLICATE KEY UPDATE xxx= VALUES(xxx)

    -     忽略插入是 insert ignore into

    INDEX普通索引允许出现相同的索引内容,平时创建的索引通常就是普通索引,利用提升查询数据性能

    PRIMARY KEY主键索引 不允许出现相同的值,且不能为NULL值,一个表只能有一个primary_key索引,常见于ID字段

    fulltext index 全文索引 上述三种索引都是针对列的值发挥作用,但全文索引,可以针对值中的某个单词,比如一篇文章中的某个词,然而并没有什么卵用,因为只有myisam引擎以及英文支持,并且效率让人不敢恭维,要全文搜索还是建议使用Luence、Solr、ES等方案,更专业且强大一些。

    索引的创建与使用

    ALTER TABLE 适用于表创建完毕之后再添加

    ALTERTABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)

    CREATE INDEX可对表增加普通索引或UNIQUE索引

    CREATE INDEXindex_name ON table_name (column_list)

    CREATE UNIQUE INDEX index_name ON table_name(column_list)

    另外,还可以在建表时添加:

    CREATE TABLE mytable (

      ... //中间字段忽略

      PRIMARY KEY (`id`),

      UNIQUE KEY `unique1`(`username`), -- 索引名称,可要可不要,不要就是和列名一样

      KEY `index1` (`nickname`),

      FULLTEXT KEY `intro` (`intro`)

    ) ENGINE=MyISAMAUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='测试表';

    一张表字段有多有少,该在哪些列上创建索引呢?其实新建索引也是有一定的原则的,建什么索引,建在哪些字段上,有以下一些原则与技巧可参考:

    -      在维度高或选择性差的列创建索引 说人话就是数据列中不重复值出现的个数,这个数量越高,维度就越高(如数据表中存在8行数据a,b ,c,d,a,b,c,d这个表的维度为4)。要为维度高的列创建索引,如性别和年龄,那年龄的维度就高于性别,性别这样的列不适合创建索引,因为维度过低,只有两三种值。

    -      对 where,on,group by,order by  中出现的列使用索引,索引一般多设置在条件列上,显示列通常少设置索引

    -      对较小的数据列使用索引 ,这样会使索引文件更小,同时内存中也可以装载更多的索引键,例如有一个字段存文本内容,新闻、资讯类那种的,内容超大,你为它设置索引就是脑袋被门夹了。

    -     为较长的字符串使用前缀索引,比如有个姓名字段firstname,varchar(50)个长,可以用

    alter table employee add key(firstname(5))

    来设置前缀索引,为什么这里只取前5个字符进行索引呢?是因为可以通过

    select 1.0 *count(distinct left(firstname,5)) / count(*) from employee

    算法得到前几个字母对标数据的覆盖率,覆盖率超过31%黄金值就可以使用前缀索引。

    -      使用组合索引,可以减少文件索引大小,在使用时速度要优于多个单列索引

    -     索引也不是越多越好,不要过多创建索引,除了增加额外的磁盘空间外,对于DML操作的速度影响很大,因为其每增删改一次就得从新建立索引

    说了创建索引,接下来就是使用索引,如果认真研读过前面的“执行计划”,SQL用到哪些索引,用了索引没有一目了然,但是有一些情况就是不会走索引,先来一些简单的示例说明:

    SELECT sname FROM stu WHERE age+10=30;  --不会使用索引,因为有索引列参与了计算

    SELECT sname FROM stu WHERE LEFT(`date`,4) <1990; -- 不会使用索引,因为使用了函数运算,原理与上面相同

    SELECT * FROM table WHERE uname LIKE'前缀%' -- 走索引

    SELECT * FROM table WHERE uname LIKE "%关键字%"-- 不走索引

    SELECT * FROM table WHERE a=1 -- a列为char字符类型,用整数找不走索引,a='1'才走索引

    SELECT * FROM table WHEREdname='xxx' or loc='xx' or deptno=45

    -- 如果条件中有or,即使其中有条件带索引也不会使用。换言之,就是要求使用的所有字段,都必须建立索引,建议大家尽量避免使用or关键字

    -- 正则表达式,regexp不走索引

    -- 表中数据不多,只有几十几百条,MySQL评估使用全表扫描要比使用索引快,也不使用索引,不要大惊小怪

    以上都是单表查询操作,多表关联查询才是业务开发的“常见姿势”,假如有一个查询:

    select a,b,c from A join B join C on a=b and b=c;

    三表join关联,假设三个表每个均有2000条记录,在没有添加索引时,则结果会进行2000*2000*2000=8000000000一共80亿次检索(因为一不小心就是一个笛卡尔乘积的恐怖扫描),只有在加了索引后,第一张表会全表扫描2000次,其余的关联表基本是range区间扫描,这样扫描次数就会降低很多很多,并且关联表时,建议多用leftjoin以少联多减少扫描次数。

    有些时候发现明明创建了索引,但是因为一些原因并没有使用索引,mysql支持强制走索引,比如:

    select* from table where a=1 force index(PRI,my_index) --强制主键索引和自己创建的索引

    与之相反,还可以禁止某个索引:

    select* from table where a=1 ignore index(PRI,my_index) --禁止使用索引

    复合索引执行顺序

    复合索引的执行顺序是有讲究的,还是以之前的案例举例:

    22267594bdd3fad1358b21f011577c5f.png

    表有一个主键索引及一个复合索引,复合索引名称:idx_cid,字段顺序分别是:cid,available及id

    只用cid执行分析:

    6cefe241dc948ab901f397c9bffbf264.png

    结果显示用到了idx_cid,接下来再看第二个字段的分析:

    f99cfa20febd1d49e38d13cc36679389.png

    没有走idx_cid索引,全表扫描,接下来再看第三个的分析:

    b27cfee21e8e3bccfe6d0a0cdeccc667.png

    因为id本身就是主键,所以也不会走idx_cid索引,而是走主键索引,假设id不是主键索引,则也不会走idx_cid索引。

    接下来再测试两两组合,先看cid +available组合:

    7eeb40dd26c6591e566ed6c56197736b.png

    结果显示用到了idx_cid,再看cid+id组合:

    f43f937893604df304bfb4fa56fa840f.png

    结果显示也用到了idx_cid,再看available+id组合:

    ef250a4979a9e59296c4b5acef402d5d.png

    结果是走的主键索引,并没有走idx_cid复合索引,于是结果很清晰了,MySQL中的复合索引有顺序,且很重要,查询条件的顺序不能随意乱写。假设A、B、C三个字段索引按A+B+C顺序创建的索引:

    A --走索引

    B --不走索引

    C --不走索引

    A + B 或 B + A -- 走索引

    B + C 或 C + B -- 不走索引

    A + B + C 或 B + C + A 或 C + B + A --走索引

    小结:在复合索引中,索引第一位的column很重要,只要查询语句包含了复合索引的第一个条件,基本上就会使用到该复合索引(可能会使用其他索引)。在建复合索引的时候应该按照column的重要性从左往右建。

    索引的坑

    既然索引这么好,我们是不是应该尽可能多用索引呢?并不是。

    首先,不要盲目的创建索引,应只为那些查询操作频繁的列创建索引,创建索引会使查询操作变得更加快速,但是会降低增加、删除、更新操作的速度,因为执行这些操作的同时会对索引文件进行重新排序或更新;其次,在互联网应用中,查询的语句远远大于DML的语句,为一个大表(比如千万级数据)新建索引时是一个需要特别慎重的事情,经常出现“翻车”导致“车毁人亡”的事故,为什么?因为线上系统在被人使用,如果这时候开发或者运维人员执行一个创建索引的语句,容易导致表被锁死,所有操作排队无法被响应,时间一长容易导致业务崩溃,形成链式连锁反应,让业务蒙受巨大损失。百万或千万级数据库,大表加索引有一个比较好的方法:online-schema-change,有兴趣可自行网上搜索,此文不再赘述。好了,关于MySQL索引,我们就介绍到这里,记得给个 “在看” 哦~~~

    49c4533f911d1dd05ca24cedcfdd493b.png

    老表Pro已经满了

    所以大家加老表Max吧

    每日留言

    说说你最近遇到的一个编程问题

    或者新学的一个小技巧?

    (字数不少于15字)24e4c22a03f1a53deef7ac9849cb1c69.png

    完整Python基础知识要点

    Python小知识 | 这些技能你不会?(一)Python小知识 | 这些技能你不会?(二)Python小知识 | 这些技能你不会?(三)Python小知识 | 这些技能你不会?(四)

    近期推荐阅读:

    【1】整理了我开始分享学习笔记到现在超过250篇优质文章,涵盖数据分析、爬虫、机器学习等方面,别再说不知道该从哪开始,实战哪里找了【2】【终篇】Pandas中文官方文档:基础用法6(含1-5)觉得不错就点一下“在看”吧 8ee782bc5d437541e3833ec2b48f9ac8.gif
    展开全文
  • 从7月1起,上海作为全国试点城市之一进入了垃圾分类“强制时代”。...而sortclassify作为动词形式,都有分类的意思。上海的生活垃圾主要分为有毒垃圾、可回收垃圾、湿垃圾、干垃圾四类:1、Hazar...
  • 日前,有网友询问:武汉光谷最近设置了“限时停车3分钟”的停车位,旁边有个停车标识“P”“半个”禁停标识,这到底是什么意思?12月1,记者在珞喻东路光谷大道的交叉路口找到了群友说的“限时停车3分钟”的...
  • “人才引进”指引进高学历高技能这两类人群。什么是高学历呢?就是全制统招本科学历及以上学历+学位证。注意!一定制的学历,成人教育的学历不算。那什么高技能呢?就是拥有某项技能并拥有相关...
  • 规整大潮下,叠加外围经济环境新变化,网贷业务...对于小牛在线当前还未推出相应的兑付方案,该平台相关人士回应称,后续经过修改确认一系列的流程后,会推出兑付方案。5月11,深圳警方称将督导该平台网贷业务...
  • 去银行开卡,跟我说I类户II类户是什么意思啊?先帮大家回忆一下,是从2016年12月1那一天开始,去银行办卡发现银行小姐姐会跟说:“只能开II类户哦~”什么鬼?二类户是什么?最简单的来说,二类户就是限额了...
  • 随着代购海淘的流行,产品的来源渠道,生产日期使用期限等...但有一点值得注意,买过日妆的少女都知道,日本原产的商品没有生产日期的,化妆品生产商不会再产品上打上生产日期,这什么呢?其实,日本在回...
  • 睡莲的花语是什么意思 睡莲为多年生水生草本;根状茎肥厚。叶柄圆柱形,细长。知道它的花语。下面由小编给大家带来的睡莲的花语是什么意思,希望各位客官喜欢!睡莲花语:洁净、纯真、 妖艳。纯洁、迎着朝气、抛去...
  • 9月9,在芭莎明星慈善夜大合照时,张韶涵站c位居李冰冰 、刘嘉玲章子怡中间,当时,苏芒说了一句:“韶涵,往下蹲一点”,让不少人猜测张韶涵故意抢站C位。对此,张韶涵发文“有时间做公益,其余的少啰嗦”,...
  • 人类命运共同体是什么意思 人类只有一个地球,各国共处一个世界,要倡导“人类命运共同体”意识,国际社会益成为一个中有我、我中有的“命运共同体”,面对世界经济的复杂形势全球性问题,任何国家都不可能...
  • 如果购买的国行版iPhone,那么就可以在国内任意一家iPhone直营店享受保修服务。但如果美版iPhone,一旦不小心出现了损坏,就只能自掏腰包去维修了。要知道iPhone的维修费用还是比较高的,没有保修服务也...
  • 就是死了的意思点造句:粤:您搵丧彪啊,佢琴去劈友唔小心赖咗嘢,宜家已经去咗卖咸鸭蛋啦~~普:找丧彪吗,他昨天去砍人不小心被反杀,现在已经死了啦~~拓展(来自百度并有删改):第一种说法认为,这是和广州一...
  • 12月4,《科学》杂志公布,中国研究团队构建的量子计算机“九章”,实现了对玻色采样问题的快速求解,其计算速度比目前最快的超级计算机快一百万亿倍!量子计算机刷屏全网网友们都为之骄傲欣喜但一打开文章大部分...
  • 今天小编跟大家来讨论一下:...随着嵌入式系统应用益广泛,学习嵌入式的人越来越多,但还有很多人不怎么了解嵌入式,不怎么了解嵌入式系统,尤其初学者,所以,了解嵌入式系统,非常有必要的。那么,嵌入...
  • Jan.30于2020年1月290点,传了几乎...妲己—时之彼端一句“羁绊,是什么意思?”俘获了万千少男的心。小妲己是老亚瑟同等地位的王者荣耀头牌代言人,技能就不必多壹笑多说了。她的技能算是王者荣耀所有英雄中...
  • ttraveer.exe应用程序错误是什么意思 2010年12月17  ttraveer.exe应用程序错误是什么意思  ttraveer.exe应用程序错误是什么意思  满意答案:  内存指令不能read,这是在电脑使用中经常出现的问题,内存...
  • 可是知道熔断是什么意思吗?趣哥本人大多数人一样,对理财一窍不懂,也不懂金融,这名词可真吃不透啊!难道是股市保险丝断了?NO NO NO央视主播——朱广权,对美国疫情期间经济形势进行了分析,并对熔断这一词做...
  • 杜蕾斯战队赞助UOL战队 官推公然开车LOL由于高人气高播放量吸引了一批赞助商的青睐,各式各样的广告也在比赛间层出不穷,更演变出了“喝战马,。。”“不孝子”等梗。从饮料零食洗面奶到电竞椅再到汽车,...
  • 对照序列中有意义的连续块的均值方差,检查整个序列的均值方差(如年、月、)。创建一个自相关的图。检查延迟变量之间的总体相关性。白噪声时间序列的例子在本节中,我们将使用Python创建一个高斯白噪声序列并...
  • 师范大学毕业生留言合集大全 从此一别,隔世经年,山长水阔。唯愿君,平安喜乐,不知流年。下面小编带来的师范大学毕业生留言,欢迎欣赏。... 5、思念一季的花香,漫过山谷,笼罩我,而祝...
  • 会很喜欢的文章。想学习人工智能的python的私信小编关键字:“学习”即可。免费入门带。中国工程院院士、浪潮集团首席科学家王恩东则预测了AI(人工智能)发展的三个趋势:第一创新速度AI发展的核心竞争力;第...
  • 每个工作日你都可以,到头条图文中感受珂健的汽车生活态度,到《每日问答》中查看各种汽车疑难问题的解答。珂健的汽车视界,期待的关注!主编:珂健 编辑:Wells经常跑长途,想装个胎压监测,正在纠结选内置的...
  • 荷花别样红的上一句是什么呢?映荷花别样红描写的是什么季节的景象呢?快我一起来了解下映荷花别样红全诗吧。  映荷花别样红的上一句  映荷花别样红的上一句是:接天莲叶无穷碧,映荷花别样红。 ...
  • 蓝玫瑰花语代表什么意思 蓝玫瑰花语:奇迹与不可能实现的事;纯洁,透明。 相知一种宿命,心灵的交汇让我们有诉不尽的浪漫情怀;相守一种承诺,人世轮回中,永远铭记我们这段美丽的爱情故事!其花语代表"清纯的爱...
  • 今天太宝贵,不应该为酸苦的忧虑辛涩的悔恨所销蚀,抬起下巴,抓住今天,它不再回来。一个人失败的最大原因,对自己的能力缺乏充分的信心,甚至以为自己必将失败无疑。——富兰克林路,要靠自己走。永远不要把...
  • 确实,微信的用户数10多亿,支付安全必须微信团队需要考虑保障的。但是这一次的新规针对的商家分账产品,与微信用户间转账功能无关。并不像网上很多自媒体含糊其词故意夸大新规影响到每一个微信用户,通知...
  • 在日语里许多汉字跟中文都互通的,但偏偏凡事都有那个例外,有些汉字从字面猜不出它的意思、又或是意思和中文完全两回事。一开始去到日本的有没有因此而闹过笑话呢?叔曾经就出过糗...话说叔当年并不知道汽车这...

空空如也

空空如也

1 2 3 4 5 ... 16
收藏数 304
精华内容 121
关键字:

和你日是什么意思