高并发数据库的MySql性能优化实战总结

为MySQL发送一个央时MySQL具体的操作过程

图片 1

慢查询

1.慢查询

SHOW  VARIABLES LIKE '%quer%'

图片 2

目优化技术

1.对此开创的多列索引(复合)索引,只要查询条件下了无限左边的排列,索引一般就是会见让运用。

2.对此利用like的查询,查询而是“%aaa”、“_aaa”便无见面下索引,“aaa%”就见面采取索引。

3.如果基准中出or,则要求or的保有字段都必须来目录,否则不克使用索引。

4.万一列类型是字符串,则早晚要当口径中将数据利用引号引起来,否则不动索引。

5要全表扫描比索引快,则免采取索引。

6.优化group by语句

    默认情况下mysql对具有的group by进行排序**

EXPLAIN  SELECT * FROM USER WHERE username='jxzz' GROUP BY creattime

图片 3

    如果查询中含有group
by,但用户想避免排序结果的损耗,则好动用ORDER BY NULL禁止排序

EXPLAIN  SELECT * FROM USER WHERE username='jxzz' GROUP BY creattime ORDER BY NULL

 图片 4

7.尽量所以连续查询代替子查询。因为子查询会在内存中创造临时表。而join是勿欲在内存中创造临时表。

8.用 exists 代替 in

    很多辰光用 exists 代替 in 是一个好之选:

    select num from a where num in(select num from b)

    用底的语句替换:

    select num from a where exists(select 1 from b where num=a.num)

9.使用 varchar/nvarchar 代替 char/nchar

    尽可能的动 varchar/nvarchar 代替 char/nchar
,因为首先变长字段存储空间稍加,可以省去存储空间,其次对于查询来说,在一个针锋相对比小之字段内搜索频率肯定要大数。

10.可知就此DISTINCT的就算不用GROUP BY

    SELECT OrderID FROM Details WHERE UnitPrice > 10 GROUP BY OrderID

    可改为:

    SELECT DISTINCT OrderID FROM Details WHERE UnitPrice > 10

11.能够因此UNION ALL就甭用UNION

    UNION ALL不执行SELECT DISTINCT函数,这样就是见面削减过多勿必要的资源。

 查询索引的以状态

命令

SHOW STATUS LIKE 'handler_read%'

图片 5

UNIQUE 约束

1.添加UNIQUE 约束

ALTER TABLE Persons ADD UNIQUE (Id_P)
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

2.撤销 UNIQUE 约束

ALTER TABLE Persons DROP INDEX uc_PersonID

mysql 高并作查询更新

1.施用悲观锁:

select * from table where id=123456 and useCount < 1000 for update;

2.运用乐观锁:

update table set useCount=useCount+1 where id=123456 and useCount=999;

 

网站地图xml地图