100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 查询索引MySQL性能优化 查询索引

查询索引MySQL性能优化 查询索引

时间:2021-01-16 16:40:15

相关推荐

查询索引MySQL性能优化 查询索引

时光紧张,先记一笔,后续优化与完善。

MySQL能性优化

能性优化是通过某些有效的方法来高提MySQL的行运速度,增加占用的磁盘空间。能性优化含包很多方面,例如优化查询速度,优化新更速度和优化MySQL服务器等。本文分析方法的要主有:

优化查询 优化数据库结构 优化MySQL服务器

数据库管理人员可以应用SHOW STATUS句语来查询MySQL数据库的能性。语法:SHOW STATUE LIKE ‘value’;其中value参数是经常使用的几个计统参数。

Connections:连接MySQL服务器的数次

Uptime:MySQL服务器的上线时光;

Slow_queries:慢查询的数次;

Com_select:查询操做的数次;

Com_insert:插入操纵的数次;

Com_delete:删除操纵的数次;

Com_update:新更操纵的数次;

1优化查询

查询操纵是最频仍的操纵,高提了查询速度可以有效高提MySQL数据库的能性。

首先要对查询句语行进分析,分析查询句语的令命是EXPLAIN句语和DESCRIBE句语。比如 EXPLAIN SELECT * FROM student \G;

索引可以倏地定位表中的某条记载。应用索引也可以高提数据库查询的速度,从而高提数据库的能性。如果不应用索引,查询句语将 表中的有所段字。这样查询的速度会很慢。如果应用了索引,查询句语只会查询索引段字。这样就增加查询的记载数,到达高提查询率效的的目。

在现看一个查询句语中没有索引的应用况情:

SELECT * FROM student WHERE name = ‘张三’;这样会对student表中的有所数据都查询一下,比较一下name的段字否是是张三。

然后我们在name段字上建立一个名为index_name的索引:

CREATE INDEX index_name ON student(name);

在现name段字面上已经有索引了,再行进该select句语查询的速度就非常快了,不须要历遍全部表。

但是有些时候即使查询时应用的是索引,但索引并没有起作用。比如应用了LIKE关键字行进查询时,如果匹配字符串的第一个字符为‘%’,索引不会被应用。如果‘%’不是在第一个置位,索引就会被应用。

另一种况情是在表的多个段字上建创一个索引,比如

CREATE INDEX index ON student(birth,department);这样只有查询句语条件中应用段字name时,索引才会被用到。因为name段字是多列索引的第一个段字,只有查询条件中应用了name段字才会使索引index起作用。

2优化子查询

很多查询中须要应用子查询。子查询可以使查询句语很活灵,但子查询的执行率效不高。MySQL须要为内层查询句语的查询结果建立一个临时表。然后外层查询 句语在临时表中查询记载。查询终了后,MySQL须要插销这些临时表。所以在MySQL中可以应用连接查询来取代子查询。连接查询不须要建立临时表,其速 度比子查询要快。

3优化数据库结构

1将段字很多的表分解成多个表

有些表在计划时置设了很多的段字。但是这个表中的有些段字的应用频率很低。当这个表的数据量很大时,查询数据的速度就会很慢。对于种这段字特殊多的并且有段字的应用频率不高的表,就够能将其分解成多个表。

2加增旁边表

时有须要经常查询某两个表中的几个段字。如果经常行进联表查询,就会下降MySQL数据库的查询速度。对于种这况情可以建立旁边表来高提查询速度。

先分析经常须要同时查询那几个表中的那些段字。然后将这些段字建立一个旁边表,并将来原那几个表的数据插入到旁边表中,以后就够能应用旁边表来行进查询和计统了。

3加增余冗段字

每日一道理

成熟是一种明亮而不刺眼的光辉,一种圆润而不腻耳的音响,一种不须要对别人察颜观色的从容,一种终于停止了向周围申诉求告的大气,一种不理会哄闹的微笑,一种洗刷了偏激的淡漠,一种无须声张的厚实,一种并不陡峭的高度。

计划数据库表时尽量让表到达三范式。但是,时有为了高提查询速度,可以识意有的在表中加增余冗段字。表的范规度程越高,表与表之间的关系就越多,查询时可 能经常须要在多个表之间行进连接查询,而行进连接查询会下降查询速度。比如,生学的信息存储在student表中,院系的信息存储在department 表中,通过student表中的dept_id段字与department表建立关联关系。如果要查询一个生学地点系的名称,必须从student表中拿 到dept_id段字,然后根据这个编号去department表中查找系的名称。如果须要经常须要行进这个操纵的话,连接查询会费浪很多时光。因此可以 在student表中加增一个余冗段字dept_name,这样就不必每次都行进连接查询了。其实就是一切以业务为主。

4优化插入记载的速度

插入记载时,索引和唯一性校验会都影响到插入记载的速度。而且,一次插入多条记载和多次插入一条记载所消费的时光是不一样的。根据这些况情,分离行进不同的优化。

禁用索引:插入记载时,MySQL会根据表的索引对插入的记载行进排序。如果插入大批数据时,这些排序会下降插入的速度。为了决解种这况情,在插入记载之 前先禁用索引。等插入以后再启用索引。对于新建创的表,可以先不建创索引,等记载都导入当前再建创索引。这样可以高提导入数据的速度。

ALTER TABLE 表名 DISABLE KEYS;

ALTER TABLE 表名 ENABLE KEYS;

优化INSERT句语:当大批插入数据时,议建应用一个INSERT句语插入多条记载,而不是应用多次INSERT句语。这样可以增加与数据库之间的连接等操纵。

5分析表,检查表,和优化表

分析表的要主作用是分析关键字的分布。检查表的作用是检查表否是存在误错。优化表要主作用是清除删除或者新更形成的空间费浪。

分析表 ANALYZE TABLE 表名; 应用ANALYZE TABLE分析表的中程过,数据库系统会对表加一个只读锁。在分析表的中程过,只能读取表的内容,不能插入和新更表的内容。ANALYZE TABLE 句语够能分析InnoDB和MyISAM型类的表。

检查表应用CHECK TABLE句语。在执行中程过也会给表加上只读锁。

优化表应用OPTIMIZE TABLE句语。只能优化表中的VARCHAR,BLOB,TEXT型类的段字。OPTIMIZE TABLE句语可以清除删除和新更形成的磁盘碎片,从而增加空间费浪。因为如果一个表应用了TEXT或者BLOB这样的数据型类,那么新更,删除等操纵就 会形成磁盘空间的费浪。因为,新更和删除操纵当前,前以分配的磁盘空间不会动自回收。应用OPTIMIZE TABLE句语可以将这些磁盘碎片整理出来,以便再利用。

4 优化MySQL服务器

件硬上的优化:加增内存和高提磁盘读写速度,都可以高提MySQL数据库的查询,新更的速度。另一种高提MySQL能性的式方是应用多块磁盘来存储数据。因为可以从多块磁盘上并行读取数据,这样可以高提读取数据的速度。

MySQL参数的优化:内存中会为MySQL保存部份的缓冲区。这些缓冲区可以高提MySQL的速度。缓冲区的小大都是在MySQL的置配文件中行进置设的。

下面临几个主要的参数行进细详分析:

key_buffer_size:示表索引缓存的小大。这个值越大,应用索引行进查询的速度就越快 table_cache:示表同时打开的表的个数。这个值越大,能同时打开的表的个数就越多。这个值不是越大越好,因为同时打开的表过多会影响操纵系统的能性。 query_cache_size:示表查询缓冲区的小大。应用查询缓存区可以高提查询的速度。这个式方只应用与改修操纵少且经常执行同相的查询操纵的况情;默认值是0. Query_cache_type:示表查询缓存区的开启态状。0示表关闭,1示表开启。 Max_connections:示表数据库的大最连接数。这个连接数不是越大越好,因为连接会费浪内存的源资。 Sort_buffer_size:排序缓存区的小大,这个值越大,排序就越快。 Innodb_buffer_pool_size:示表InnoDB型类的表和索引的大最缓存。这个值越大,查询的速度就会越快。这个值太大了就会影响操纵系统的能性。

理合置配这些参数可以高提MySQL数据库的能性。置配完参数后,须要重启MySQL服务才会失效

文章结束给大家分享下程序员的一些笑话语录: 《诺基亚投资手机浏览器UCWEB,资金不详或控股》杯具了,好不容易养大的闺女嫁外国。(心疼是你养的吗?中国创业型公司创业初期哪个从国有银行贷到过钱?)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。