mysql简单性能调优(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011456867/article/details/83616234

以前都是做小项目,数据库表的数据一般都不超过十万条。最近接手一考试项目,个别表的数据已经超过四百万的数据量。数据库一直没有优化过,所幸表字段不多,并没有照成很大的隐患。借此机会学习一下mysql的性能调优。

  1. mysql读取sql语句顺序
    一条sql语句经过机器解析,会分成若干个读取步骤。机器根据步骤来进行全表扫描匹配查询出我们想要的结果。mysql的顺序步骤为:
    FROM>ON–JOIN>WHERE GROUP BY> HAVING>SELECT>DISTINCT>ORDER BY>LIMIT
    下面上图更加清晰(图片来源于某机构)
    sql解析
    我们可以通过上图清晰的看出mysql加载表中数据到内存的步骤。
  2. 索引
    mysql调优最重要的一个东西就是索引。索引其实是一种数据结构,类似与我们书本的目录。通过目录快速的进行定位查找我们想看的章节。索引也是一样,通过构建索引我们可以快速的进行数据物理地址定位。从而读取数据,减少系统io的时间。mysql默认使用的数据库引擎是innoDB。innoDB使用的默认索引数据结构是B-Tree结构。和二叉树数据结构相识。
    B-tree数据结构
    既然是一种数据结构,那其毕然会占用一部分存储空间。而这种类树的数据结构。我们可以想到。如果数据顺序发生改变,例如数据的更改和删除,会导致树结构的错乱,所以mysql这时会进行结构树的重构。如果数据库数据非常庞大会占用很长时间所以如果字段需要经常进行修改和删除。那不适合建立索引。一般现在常规的做法数据库的数据也不会进行物理删除。均做逻辑删除。一是可以保证索引树的健壮。二同样也可以保证数据的完整性。方便数据的查找。
    索引的创建方式:
    1.create [unique] index 索引名称 on 表名(字段名(length));
    2.alter 表名add [unique] index [索引名称] on (字段名(length));
    如果创建多个字段的复合索引。则在字段名后面加“,”号继续添加字段
    删除索引
    drop index [索引名称] on 表名
    查看索引
    show index from 表名\G
    现在一般可以用视图工具进行创建。
    索引的类型:
索引类型 字段名 例子 备注
普通索引 NORMAL CREATE INDEX index_name ON table (column(length)) 是最基本的索引,它没有任何限制(可不写)
唯一索引 unique CREATE UNIQUE INDEX indexName ON table (column(length)) 索引列的值必须唯一,但是可以为null
主键索引 建表的主键,是一种特殊的唯一索引。建表的时候添加主键自动生成
组合索引 ALTER TABLE table ADD INDEX name_city_age (name,city,age) 多个字段组成的复合索引。主要用于条件查询
全文索引 fulltext CREATE FULLTEXT INDEX index_content ON article(content) 主要用来查找文本中的关键字,而不是直接与索引中的值相比较。
*这里需要注意的是全文索引(fulltext):fulltext索引跟其它索引大不相同,它更像是一个搜索引擎,而不是
简单的where语句的参数匹配。fulltext索引配合match against操作使用,而不是一般的where语句加like。它可
以在create table,alter table ,create index使用,不过目前只有char、varchar,text 列上可以创建全文索引
。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE index创建
fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。

*一般情况下一张表建立的索引最好不要超过5个。

猜你喜欢

转载自blog.csdn.net/u011456867/article/details/83616234
今日推荐