discuz怎么做网站,怎样做吓人网站,仿百度百科网站源码,北京网站推广排名索引index#xff0c;是一种有序的数据结构#xff0c;可以高效的获取数据#xff0c;在数据库中维护着满足查找特定算法的数据结构#xff0c;就是索引 无索引的情况#xff0c;查询数据时会全表扫描#xff0c;效率极低 索引结构
#xff08;1#xff09;二叉树是一种有序的数据结构可以高效的获取数据在数据库中维护着满足查找特定算法的数据结构就是索引 无索引的情况查询数据时会全表扫描效率极低 索引结构
1二叉树查询性能还行但当数据顺序插入时就会形成链表数据量大时层级就深查询效率慢
2红黑树是普通二叉树优化但本质仍是二叉树不适合大数据情况
3BTree即多路平衡查找树该树一个节点下可以挂多个节点以一个5阶的树他的每个节点底下可以挂5个子节点每个节点最多存储4个key5个指针。节点中超过了4个key就会向上分裂。 4BTree以4阶的树为例所有的元素都会出现在叶子节点上面的节点不存放数据且叶子节点形成了单项链表、 在mysql中的BTree中对普通的树进行了优化即叶子节点形成的不再是单向链表而是双向链表 5Hash用一定的hash算法算出对应的hash值映射到对应的位置上然后存储在hash表中
多个key计算的hash值有可能重复可以通过链表来解决类似HashMap
Hash只能用于对等比较不能范围查询也不能排序因为查询结果无序但查询效率高通常只需要查询一次有时候遇到hash碰撞要多查询 索引的分类
1主键索引PRIMARY
2唯一索引UNIQUE
3常规索引
4全文索引FULLTEXT innoDB中索引按存储形式又分为聚集索引和二级索引 聚集索引就是叶子节点下挂的是这一行的行数据而二级索引的叶子节点下挂的是表的主键还要通过主键再次索引
如果表有主键主键索引就是聚集索引
不存在主键将使用第一个unique索引作为聚集索引
上述都不存在则会自动生成一个rowid作为聚集索引 索引的语法
1查看对应表的索引 show index from 表名
2创建索引 create [ PRIMARY/UNIQUE/FULLTEXT] index 索引名 on 表名
索引名一般这样取idx_
--------------------------
索引性能优化
性能的优化主要是优化查询语句所以怎么才能知道什么表中的查询较多呢
1根据show [session / global] status like Com__9_____;可以访问CRUD的访问频次 2查看慢查询日志
所有执行时间超过参数long_query_time的查询都会被记录在慢查询日志默认下慢查询日志未开启
3profile
数据库支持profile的话可以使用可以使用select have_profiling查看是否支持
profiling默认为关闭需要set profiling 1打开开关
show proflies能够帮我们查看sql优化中时间都花在了哪里 4explain执行计划
前三种方法都只是在时间上判断sql语句性能而explain或desc可以获取如何执行select的信息包括在执行中表如何连接和连接的顺序情况 explain执行计划中各个字段的含义
idselect查询的序列号表示查询中执行select字句或是操作表的顺序当id相同时执行顺序从上到下id不同则id越大越先执行。
select_type表示select的类型一般有primary主查询即外层查询simple不使用表连接或子查询unionunion中的第二个或之后的查询语句subquery子查询
type表示连接类型性能由好到差的连接类型为null不使用任何表system访问了系统表const使用主键或唯一索引访问eq_refref使用非唯一索引range范围查询indexall优化sql时尽量往前优化。
possible_keys可能应用到这张表上的索引
keys实际使用的索引无则为null
key_len索引使用的字节数一般来说长度越短越好
rowsmysql认为必须要执行查询的行数是一个估计值
filtered返回结果的行数占需读取行数的百分比越大越好
extra额外展示的信息