为了账号安全,请及时绑定邮箱和手机立即绑定
  • limit常用于分页处理,时常会伴随order by从句使用,因此大多时候会使用Filesorts这样会造成大量的io问题 1.使用有索引的列或主键进行order by操作 2.记录上次返回的主键,在下次查询时使用主键过滤 即将:select film_id,description from sakila.film order by film_id limit 50,5; 改为:select film_id,description from sakila.film where file_id >55 and film_id<=60 order by film_id limit 1,5; 使用这种方式有一个限制,就是主键一定要顺序排序和连续的,如果主键出现空缺可能会导致最终页面上显示的列表不足5条,解决办法是附加一列,保证这一列是自增的并增加索引就可以了
    查看全部
  • Max()和Count()的优化 1.对max()查询,可以为表创建索引,例如 select max(payment_date) from payment; 可以对payment建立索引 create index idx_paydate on payment(payment_date); 然后在进行查询 2.count()对多个关键字进行查询,比如在一条SQL中同时查出2006年和2007年电影的数量,语句: select count(release_year='2006' or null) as '2006年电影数量', count(release_year='2007' or null) as '2007年电影数量' from film; 这里解释一下为什么要加'or null': count()函数只有count(NULL)是才不计数,即count(NULL)=0; 而'release_year='2006''是个比较运算符,结果为1或者0,不管是不是2006 count函数都会计数。 当加上or null以后,当值不为2006,release_year='2006'的结果为0, '0 or null'结果为null,这样就排除了2006以外的结果 3.count(*) 查询的结果中,包含了该列值为null的结果
    查看全部
  • 1 SQL及索引(提升性能最大,效率最高) 2 数据库表结构(根据范式设计表结构) 3 系统配置(linux对mysql打开文件数的限制等) 4 硬件(提高文件io的速度,但是成本最高) io的优化 并不能减少阻塞 ,但sql索引没有优化好,则会产生大量的慢查询或阻塞,这是由于mysql的内部锁机制造成,所以硬件再好效果也不大 mysql对内核是有限制的
    查看全部
    6 采集 收起 来源:MySQL优化简介

    2016-10-31

  • pt-工具集地址:http://www.percona.com/software/percona-toolkit
    查看全部
  • explain 返回各列的含义 table:显示这一行的数据时关于哪张表的 type:显示连接使用了何种类型 const、eq_reg、ref、range、index和ALL;const:主键、索引;eq_reg:主键、索引的范围查找;ref:连接的查找(join),range:索引的范围查找;index:索引的扫描; possible_keys:显示可能应用在这张表中的索引,如果为空,没有可能的索引 key:实际使用的索引,如果为null,没有使用索引 key_len:使用的索引的长度,在不损失精确性的情况下,长度越短越好 ref:显示索引的哪一列被使用了,如果可能的话,是一个常数 rows:mysql认为必须检查的用来返回请求数据的行数; extra:如果返回值是如下两个就需要进行优化了 using filesort:mysql需要进行额外的步骤来发现如果对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行 using temporary:MySQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行order by上,而不是group by 上 其中type是重要的列,以下从最好到最差: const:是一个常数查找,一般是主键和唯一索引查找 eq_reg:主键和唯一索引的范围查找 ref:连接的查找,一般一个表是基于某一个索引的查找 range:基于索引的范围查找 index:基于索引的扫描 all:基于表扫描
    查看全部
  • 1)查看mysql是否开启慢查询日志 show variables like 'slow_query_log'; 2)设置没有索引的记录到慢查询日志 set global log_queries_not_using_indexes=on; 3)查看超过多长时间的sql进行记录到慢查询日志 show variables like 'long_query_time' 4)开启慢查询日志 set global slow_query_log=on 5)查看慢查询日志文件位置 show variables like 'slow%';
    查看全部
  • #重要,缓冲池的大小 推荐总内存量的75%,越大越好。 innodb_buffer_pool_size #默认只有一个缓冲池,如果一个缓冲池中并发量过大,容易阻塞,此时可以分为多个缓冲池; innodb_buffer_pool_instances #log缓冲的大小,一般最常1s就会刷新一次,故不用太大; innodb_log_buffer_size #重要,对io效率影响较大。0:1s刷新一次到磁盘;1:每次提交都会刷新到磁盘;2:每次提交刷新到缓冲区,1s刷新到磁盘;默认为1。 innodb_flush_log_at_trx_commit #读写的io进程数量,默认为4 innodb_read_io_threads innodb_write_io_threads #重要,控制每个表使用独立的表空间,默认为OFF,即所有表建立在一个共享的表空间中。 innodb_file_per_table #mysql在什么情况下会刷新表的统计信息,一般为OFF。 innodb_stats_on_metadata
    查看全部
  • 表的范式化即数据库设计的规范化:数据表不存在非关键字段对任意关键字段的传递函数依赖,则符合第三范式。 可以将一张数据表进行拆分,来满足第三范式的要求。 设计表的时候符合范式化是为了:减少数据冗余、减少表的插入、更新、删除异常 设计表的时候使用反范式化是为了:以空间换时间、增强代码的可编程性和可维护性 不符合第三范式要求的表存在以下问题: 1.数据冗余:(分类、分类描述)对于每一个商品都会进行记录 2.数据插入异常 3.数据更新异常 4.数据删除异常
    查看全部
  • 过多的索引不但影响写入,而且影响查询,索引越多,分析越慢 如何找到重复和多余的索引,主键已经是索引了,所以primay key 的主键不用再设置unique唯一索引了 冗余索引,是指多个索引的前缀列相同,innodb会在每个索引后面自动加上主键信息 冗余索引查询工具 pt-duplicate-key-checker
    查看全部
  • 冗余 rong(3声)余 不是zhong余
    查看全部
  • 第三方配置工具
    查看全部
  • SQL及索引优化

    1、show_query_log_file:慢查日志存储位置

    2、log_queries_not_use_indexes:是否把没有使用索引的查询记录到慢查询日志中

    3、long_query_time:超过多少秒的查询记录到慢查询日志中

    使用MySQL慢查日志对有效率问题的SQL进行监控

    • show variables like 'slow_query_log';    //查看是否开启慢查日志

    • set global slow_query_log_file = 'xxx' //设置慢查日志的文件地址

    • set global log_queries_not_using_indexes=on;    //是否把没有使用sql索引记录到慢查日志中

    • set global long_query_time=1;    //设置慢查日志的时间,查寻超过多少秒记录(单位:秒)


    查看全部
  • http://dev.mysql.com/doc/index-other.html. 解压 解压sakila-db.zip到Desktop,里面包含三个文件 sakila-schema.sql //数据库结构文件 sakila-data.sql //数据文件 sakila.mwb 将数据库结构还原到mysql mysql> source Desktop/sakila-db/sakila-schema.sql; 将数据写入到数据库 mysql> source Desktop/sakila-db/sakila-data.sql;
    查看全部
    3 采集 收起 来源:数据准备

    2018-03-22

  • 这个例子中,可以把 explain select actor.first_name,actor.last_name,count(*) from film_actor inner join actor on actor.actor_id = film_actor.actor_id group by actor.actor_id\G 改写为 explain select actor.first_name,actor.last_name,c.cnt from actor inner join (select actor_id,count(*) AS cnt from film_actor GROUP BY actor_id) AS c USING(actor_id)\G
    查看全部
    3 采集 收起 来源:group by的优化

    2016-12-07

  • //mysql 数据库优化 group by可能会出现临时表(Using temporary),文件排序(Using filesort)等,影响效率。 可以通过关联的子查询,来避免产生临时表和文件排序,可以节省io 改写前 select actor.first_name,actor.last_name,count(*) from sakila.film_actor inner join sakila.actor using(actor_id) group by film_actor.actor_id; 改写后 select actor.first_name,actor.last_name,c.cnt from sakila.actor inner join( select actor_id,count(*) as cnt from sakila.film_actor group by actor_id )as c using(actor_id);
    查看全部
    3 采集 收起 来源:group by的优化

    2015-01-23

首页上一页1234567下一页尾页

举报

0/150
提交
取消
课程须知
想要学好这门课程,你需要具备MySQL数据库的基本知识,如果具有相关的工作经验并且希望能提升工作技能的话,这门课程就再适合不过了。
老师告诉你能学到什么?
1、了解数据库优化的各个方面的方法和技巧 2、如何对SQL语句和索引进行优化 3、如何对数据库结构及运行环境进行优化

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!