数据库 1

作者: 流光已至 | 来源:发表于2019-05-08 10:08 被阅读4次
    1 mysql 使用的引擎?

    1 Myisam ,不支持事务 ,适用于查询密集型和插入密集型
    2 Innodb,支持事务,适用于更新密集型,并发能力强
    3 memory: 出发点是速度,采用的逻辑存储介质是内存。

    2 索引的优点

    1.大大加快数据的检索速度;
    2.创建唯一性索引,保证数据库表中每一行数据的唯一性;
    3.加速表和表之间的连接;
    4.在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间

    3 索引的缺点:

    1.索引需要占物理空间。
    2.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

    4 创建索引的原则

    1 select 操作占大部分的表上创建索引;
    2 在 where 子句中出现最频繁的列上创建索引;
    3 在选择性高的列上创建索引(补充索引选择性,最高是 1, eg: primary key)
    4 复合索引的主列应该是最有选择性的和 where 限定条件最常用的列,并以此类推第二列
    5 小于 5M 的表,最好不要使用索引来查询,表越小,越适合用全表扫描

    5 使用索引的原则

    1 查询结果是所有数据行的 5%以下时,使用 index 查询效果最好;
    2 where 条件中经常用到表的多列时,使用复合索引效果会好于几个单列索引。因为当 sql 语句所查询的列,全部都出现在复合索引中时,此时由于 Oracle 只需要查询索引块即可获 得所有数据,当然比使用多个单列索引要快得多;
    3 索引利于 select,但对经常 insert, delete 尤其 update 的表,会降低效率

    6 建索引

    create index abc on student(sid,sname);
    drop index abc;

    7 管理索引

    1)先插入数据后创建索引
    向表中插入大量数据之前最好不要先创建索引, 因为如果先建立索引。 那么在插入每行
    数据的时候都要更改索引。这样会大大降低插入数据的速度。选择适当的列建立索引
    2)设置合理的索引列顺序
    3)限制每个表索引的数量
    4)删除不必要的索引
    5)为每个索引指定表空间

    8 索引失效的情况

    索引(B-树, B+树),一般来说,应该在这些列上加索引:
    1)经常需要搜索的列,加快搜索速度
    2)作为主键的列,强制该列的唯一性
    3)在经常用在连接的列上,这些列主要是外键,可以加快连接速度
    4)在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,指定的范围是连续的
    5)在经常需要排序的列上。

    唯一索引:不允许其中任何两行有相同的值。
    主键索引:为表定义主键自动创建主键索引,是唯一索引的特定类型:
    聚集索引: b-树中一次检索最多需要 h-1 次 io(根节点常驻内存, h 为树的高度),一般用磁盘 io 来评价索引的优劣, b 树中一个节点对应一页,所以一个 node 只要一次 io。

    下列事件索引会失效:
    1)条件中有 or,即使其中有条件带索引也不会使用(要想使用
    or 又想让索引生效,只能将 or 条件中每个列加上索引)
    2) like 查询,以%开头
    3)若列类型为字符串,则一定要在条件中将数据用引号引起来,否则不使用索引
    4)若 mysql 估计使用全表扫描要比索引快,则不使用索引
    5)对索引进行运算导致索引列失效
    6)使用内部函数导致索引失效,这样应当创建基于函数的索引
    7) b-树, is null 不会用, is not null 会用。

    相关文章

      网友评论

        本文标题:数据库 1

        本文链接:https://www.haomeiwen.com/subject/teneoqtx.html