-
这个例子中,可以把 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查看全部
-
//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);查看全部
-
//mysql 数据库优化 Max()和Count()的优化 1.对max()查询,可以为表创建索引,create index index_name on table_name(column_name 规定需要索引的列),然后在进行查询 2.count()对多个关键字进行查询,比如在一条SQL中同时查出2006年和2007年电影的数量,语句: select count(release_year='2006' or null) as '2006年电影数量', count(release_year='2007' or null) as '2007年电影数量' from film; 3.count(*) 查询的结果中,包含了该列值为null的结果查看全部
-
演示数据库安装链接<br> http://downloads.mysql.com/docs/sakila-db.zip<br> http://dev.mysql.com/doc/index-other.html<br> http://dev.mysql.com/doc/sakila/en/sakila-installation.html查看全部
-
数据库优化金字塔查看全部
-
数据表是按照行的方式进行存储的,一个数据表中包含了许多行,而每一行由不同的字段组成,这些字段称为列,这就是数据表的结构; 在查询的时候,如果没有指定索引,那么必须要对每一行都进行扫描,然后才能找到每行中被查询的字段,所以可以说,在没有索引的情况下,要扫描整个表才可以查询到需要的数据; 在添加了索引之后,那么会增加一个索引表,这个索引表记录了索引值 与 对应字段的关系,然后,以该字段进行的查询操作,将不再需要扫描原来的数据表的每一行,而是扫描这个建立的索引表,显然,这个索引表的IO的操作就比原来的数据表要小很多了,所以可以提升查询的速度,并且如果表的字段比较多的情况,那么建立索引的总用越明显;同时,因为要维护这个索引表,所以当进行增,删,改的时候,性能会相对下降; 覆盖索引,就是说 通过索引的值,在索引表中就可以找到需要的值查看全部
-
io的优化 并不能减少阻塞 ,但sql索引没有优化好,则会产生大量的慢查询或阻塞,这是由于mysql的内部锁机制造成,所以硬件再好效果也不大查看全部
-
如果设计成3张表话,那么删除一个商品就得删除商品表和关联表。为什么不设计成俩张表 商品表(其中有分类字段id)和分类表 呢?查看全部
-
type: const(唯一「主键」查找), eq_reg(唯一索引的范围查找), ref(基于外键唯一索引的连接的查找), range(基于索引的范围查找), index(index scan), all(all table scan)查看全部
-
zhelibuhui查看全部
-
innodb_buffer_pool_size配置 innodb的缓冲池,如果数据库中只有innodb表,则推荐配置为总内存的75% innodb_buffer_pool_instances配置缓冲池的个数,默认是一个。 innodb_flush_log_at_trx_commit(0,1,2)提交的策略。 innodb_read_io_threads(默认是4) innodb_write_io_threads innodb_file_per_table,控制innodb每一个表使用独立的表空间,默认是OFF,造成IO瓶颈。推荐设置ON。 innodb_stats_on_metadata配置mysql在什么情况下刷新innodb表的统计信息。查看全部
-
查看是否打开慢查询日志:
show variables like 'slow_query_log';
如果查到是off, 说明没有开启该功能, 使用如下命令开启:
set global slow_query_log=on;
查看是否将没有建立索引的查询列入慢查询记录:
show variables like '%log%';
显示的结果中有一项"log_queries_not_using_indexes"值为off, 说明没有开启, 使用下面的命令开启:
set global log_queries_not_using_indexes=on;
查看慢查询时间设置:
show variables like 'long_query_time';
显示的值为"0.00000"则表示要将所有查询记录到日志.
设置慢查询时间设置:
set global long_query_time=0;
设置为零则记录所有查询信息.
使用如下命令查看查询日志的文件位置:
show variables like 'slow%';
可以看到有一项"slow_query_log_file"的值为"/var/lib/mysql/localhost-slow.log", 这就是慢查询日志文件的存放位置.
查看全部 -
服务器硬件优化:
1.cpu选择:mysql一个sql的执行只能用到单核的cpu,其次,在复制进程的时候也是只能用到单核的cpu,所以cpu并不是越多越好,mysql5.5是的服务器不要超过32核,偏向选择单核频率更快的cpu;
2.Disk IO 优化
常用的RAID 级别简介
RAID0: 也称为条带,多个磁盘接成一个使用,io最好(但是磁盘坏了,数据没了,安全性差)
RAID1: 也称镜像,要求至少两个磁盘,每组磁盘存储的数据相同;
RAID1+0: 就是RAID1和RAID0的结合,同时具备两个级别的优缺点,推荐数据库使用这个级别;
目前可能还有更好的存储设备:比如ssd卡
查看全部 -
查看是否开启慢查询日志 show variables like 'slow_query_log'
设置没有索引的记录到慢查询日志 set global log_queries_not_using_indexes=on
查看超过多长时间的sql进行记录到慢查询日志 show variables like 'long_query_time'
设置慢查询的时间 set long_query_time=1查看全部 -
Mysql 数据库优化 数据库优化的目的 避免出现页面访问错误 。由于数据库联接timeout产生页面5**错误 。由于慢查询造成页面无法加载 。由于阻塞造成数据无法提交 增加数据库的稳定性 。很多数据库问题都是由于低效的查询引起的 优化用户体验 。流畅页面的访问速度 。良好的网站功能体验查看全部
举报