• 微信
    咨询
    微信在线咨询 服务时间:9:00-18:00
    纵横数据官方微信 使用微信扫一扫
    马上在线沟通
  • 业务
    咨询

    QQ在线咨询 服务时间:9:00-18:00

    选择下列产品马上在线沟通

    纵横售前-老古
    QQ:519082853 售前电话:18950029581
    纵横售前-江夏
    QQ:576791973 售前电话:19906048602
    纵横售前-小李
    QQ:3494196421 售前电话:18965140883
    纵横售前-小智
    QQ:2732502176 售前电话:17750597339
    纵横售前-燕子
    QQ:609863413 售前电话:17750597993
    纵横值班售后
    QQ:407474592 售后电话:400-1886560
    纵横财务
    QQ:568149701 售后电话:18965139141

    售前咨询热线:

    400-188-6560

    业务姚经理:18950029581

  • 关注

    关于纵横数据 更多优惠活动等您来拿!
    纵横数据官方微信 扫一扫关注官方微信
  • 关闭
  • 顶部
  • 您所在的位置 : 首页 > 新闻公告 > MySQL数据库快问快答

    MySQL数据库快问快答

    1. UNION ALL 与 UNION 的区别

    2. TRUNCATE 与 DELETE 区别

    一般情景下,TRUNCATE性能比DELETE好一点。

    3. TIMESTAMP 与 DATETIME 的区别

    相同点

    TIMESTAMP 列的显示格式与 DATETIME 列相同。显示列宽固定在19字符,并且格式为YYYY-MM-DD HH:MM:SS。

    不同点

    TIMESTAMP

    DATETIME

    4. 什么是联合索引

    两个或更多个列上的索引被称作联合索引,联合索引又叫复合索引。

    5. 为什么要使用联合索引

    6. MySQL 联合索引最左匹配原则

    7. 什么是聚集和非聚集索引

    8. 什么是覆盖索引

    覆盖索引(covering index)指一个查询语句的执行只用从索引页中就能够取得(如果不是聚集索引,叶子节点存储的是主键+列值,最终还是要回表,也就是要通过主键再查找一次),避免了查到索引后,再做回表操作,减少I/O提高效率。

    可以结合第10个问题更容易理解。

    9. 什么是前缀索引

    前缀索引就是对文本的前几个字符(具体是几个字符在创建索引时指定)创建索引,这样创建起来的索引更小。但是MySQL不能在ORDER BY或GROUP BY中使用前缀索引,也不能把它们用作覆盖索引。

    创建前缀索引的语法:

    ALTER TABLE table_name ADD
    KEY(column_name(prefix_length))

    10. InnoDB 与 MyISAM 索引存储结构的区别

    简单的说:

    11. 为什么尽量选择单调递增数值类型的主键

    InnoDB中数据记录本身被存于主索引(B+树)的叶子节点上。这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放,因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的结点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页。

    如果使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引结点的后续位置,当一页写满,就会自动开辟一个新的页,这样就会形成一个紧凑的索引结构,近似顺序填满。由于每次插入时也不需要移动已有数据,因此效率很高,也不会增加很多开销在维护索引上。

    如果使用非自增主键,由于每次插入主键的值近似于随机,因此每次新纪录都要被插入到现有索引页的中间某个位置,此时MySQL不得不为了将新记录查到合适位置而移动元素,甚至目标页可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过 OPTIMIZE TABLE 来重建表并优化填充页面。

    简单的说:

    索引树只能定位到某一页,每一页内的插入还是需要通过比较、移动插入的。所以有序主键可以提升插入效率。

    12. 建表时,int 后面的长度的意义

    int占多少个字节,已经是固定的了,长度代表了显示的最大宽度。如果不够会用0在左边填充,但必须搭配zerofill使用。也就是说,int的长度并不影响数据的存储精度,长度只和显示有关。

    13. SHOW INDEX 结果字段代表什么意思

    Table:

    Non_unique:

    Key_name:

    Seq_in_index:

    Column_name:

    Collation:

    Cardinality:

    Sub_part:

    Null:

    Index_type:

    1. 如何解决like’%字符串%’时索引失效?

    LIKE问题:like 以通配符开头 (‘%abc…’),mysql索引失效会变成全表扫描的操作。

    解决办法:

    使用覆盖索引,可以由 ALL 变为INDEX,为啥呢?覆盖索引之后就能使用使用索引进行全表扫描。这里要注意一下,使用符合索引的时候,命中一个字段就可以,不用全部命中。

    15. MySQL高效分页

    存在SQL:SELECT * FROM ttl_product_info ORDER BY id LIMIT N,M。其中 LIMIT N,M 存在的问题最大:取出N+M行,丢弃前N行,返回 N ~ N+M 行的记录,如果N值非常大,效率极差(表记录1500w,N=10000000,M=30 需要9秒)。

    解决办法:SQL:SELECT id FROM ttl_product_info WHERE id > N LIMIT M,id 列是索引列,id > N属于 range 级别,效率自然高,然后从位置开始取30条记录,效率极高(表记录1500w,N=10000000,M=30,需要0.9毫秒)。

    当然想要实现上述效果的前提是:


    最新推荐


    微信公众帐号
    关注我们的微信