mysql索引和存储引擎笔记

mysql索引的使用和优化:

  • MySQL索引的类型:
  1. 普通索引
  2. 唯一索引:值必须唯一,但允许有空值(注意和主键不同),如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。
  3. 主键索引
  4. 全文索引(FULLTEXT):FULLTEXT索引仅可用于 MyISAM 表
  5. 组合索引(最左前缀):
                ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))。
                建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
                    –title,time
                    –title
                只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索引

索引失效:

  • ike语句操作:like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
  • 在列上进行运算:select * from users where YEAR(adddate)<2007,将在每个行上进行运算,这将导致索引失效而进行全表扫描
  • 单列索引无法储null值,复合索引无法储全为null的值:索引是有序的。NULL值进入索引时,无法确定其应该放在哪里
  • 不适合键值较少的列(重复数据较多的列)
  • 要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引
  • 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引

MySQL主要提供2种方式的索引:B-Tree索引,Hash索引

  • B树索引具有范围查找和前缀查找的能力
  • 哈希索引只能做等于查找,但是无论多大的Hash表,查找复杂度都是O(1)

mysql 的 存储结构(储存引擎):

  • MyISAM:它不支持事务,也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。
  • MyISAM Merge引擎:这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。
  • InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能。
  • memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。
  • archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。

存储结构:
    都是用 B+Tree 来存储数据的。

你可能感兴趣的:(数据库)