美文网首页
MySQL参数优化

MySQL参数优化

作者: 码出高效 | 来源:发表于2018-08-10 12:20 被阅读26次

    MySQL参数优化

    1:MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看

    mysql> show variables like 'max_connections';

    2:查看当前访问Mysql的线程

    mysql> show processlist;

    3:设置最大连接数

    mysql>set globle max_connections = 5000;

    最大可设置16384,超过没用

    4:查看当前被使用的connections

    mysql>show globle status like 'max_user_connections'

    (一) 使用查询缓存优化查询

    大多数的MySQL服务器都开启了查询缓存。这是提高性能最有效的方法之一,而且这是被MySQL引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放入一个缓存中,这样后续的相同查询就不用操作而直接访问缓存结果了。

    这里最主要的问题是,对于我们程序员来说,这个事情是很容易被忽略的。因为我们某些查询语句会让MySQL不使用缓存,示例如下:

    1:SELECT username FROM user WHERE    signup_date >= CURDATE()

    2:SELECT username FROM user WHERE    signup_date >= '2014-06-24‘

    上面两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存。

    (二) 使用EXPLAIN关键字检测查询

    使用EXPLAIN关键字可以使我们知道MySQL是如何处理SQL语句的,这样可以帮助我们分析我们的查询语句或是表结构的性能瓶颈;EXPLAIN的查询结果还会告诉我们索引主键是如何被利用的,数据表是如何被被搜索或排序的....等等。语法格式是:EXPLAIN +SELECT语句;

    (三)当只要一行数据时使用LIMIT 1

    加上LIMIT 1可以增加性能。MySQL数据库引擎会在查找到一条数据后停止搜索,而不是继续往后查询下一条符合条件的数据记录。

    (四)为搜索字段建立索引

    索引不一定就是给主键或者是唯一的字段,如果在表中,有某个字段经常用来做搜索,需要将其建立索引。

    索引的有关操作如下:

    1.创建索引

    在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。

    1.1> ALTER TABLE

    ALTER TABLE 用来创建普通索引、唯一索引、主键索引和全文索引

    ALTER TABLE table_name ADD INDEX index_name (column_list);

    ALTER TABLE table_name ADD UNIQUE (column_list);

    ALTER TABLE table_name ADD PRIMARY KEY (column_list);

    ALTER TABLE table_name ADD FULLTEXT (column_list);

    其中table_name是要增加索引名的表名,column_list指出对哪些列列进行索引,多列时各列之间使用半角逗号隔开。索引名index_name是可选的,如果不指定索引名称,MySQL将根据第一个索引列自动指定索引名称,另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。

    1.2> CREATE INDEX

    CREATE INDEX可对表增加普通索引或UNIQUE索引以及全文索引,但是不可以对表增加主键索引

    CREATE INDEX index_name ON table_name (column_list);

    CREATE UNIQUE index_name ON table_name (column_list);

    CREATE FULLTEXT index_name ON table_name (column_list);

    table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名必须指定。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

    2.索引类型

    普通索引INDEX:适用于name、email等一般属性

    唯一索引UNIQUE:与普通索引类似,不同的是唯一索引要求索引字段值在表中是唯一的,这一点和主键索引类似,但是不同的是,唯一索引允许有空值。唯一索引一般适用于身份证号码、用户账号等不允许有重复的属性字段上。

    主键索引:其实就是主键,一般在建表时就指定了,不需要额外添加。

    全文检索:只适用于VARCHAR和Text类型的字段。

    注意:全文索引和普通索引是有很大区别的,如果建立的是普通索引,一般会使用like进行模糊查询,只会对查询内容前一部分有效,即只对前面不使用通配符的查询有效,如果前后都有通配符,普通索引将不会起作用。对于全文索引而言在查询时有自己独特的匹配方式,例如我们在对一篇文章的标题和内容进行全文索引时:

    ALTER TABLE article ADD FULLTEXT ('title', 'content'); 在进行检索时就需要使用如下的语法进行检索:

    SELECT * FROM article WHERE MATCH('title', 'content') AGAINST ('查询字符串');

    在使用全文检索时的注意事项:

    MySql自带的全文索引只能用于数据库引擎为MYISAM的数据表,如果是其他数据引擎,则全文索引不会生效。此外,MySql自带的全文索引只能对英文进行全文检索,目前无法对中文进行全文检索。如果需要对包含中文在内的文本数据进行全文检索,我们需要采用Sphinx(斯芬克斯)/Coreseek技术来处理中文。另外使用MySql自带的全文索引时,如果查询字符串的长度过短将无法得到期望的搜索结果。MySql全文索引所能找到的词默认最小长度为4个字符。另外,如果查询的字符串包含停止词,那么该停止词将会被忽略。

    3.组合索引

    组合索引又称多列索引,就是建立索引时指定多个字段属性。有点类似于字典目录,比如查询 'guo' 这个拼音的字时,首先查找g字母,然后在g的检索范围内查询第二个字母为u的列表,最后在u的范围内查找最后一个字母为o的字。比如组合索引(a,b,c),abc都是排好序的,在任意一段a的下面b都是排好序的,任何一段b下面c都是排好序的

    组合索引的生效原则是  从前往后依次使用生效,如果中间某个索引没有使用,那么断点前面的索引部分起作用,断点后面的索引没有起作用;

    (五)在join表的时候使用相当类型的列,并将其索引

    如果在程序中有很多JOIN查询,应该保证两个表中join的字段时被建立过索引的。这样MySQL颞部会启动优化JOIN的SQL语句的机制。注意:这些被用来JOIN的字段,应该是相同类型的。例如:如果要把 DECIMAL 字段和一个 INT 字段Join在一起,MySQL就无法使用它们的索引。对于那些STRING类型,还需要有相同的字符集才行。(两个表的字符集有可能不一样)  

    相关文章

      网友评论

          本文标题:MySQL参数优化

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