来自 新葡亰数据库 2019-11-20 12:39 的文章
当前位置: 澳门新葡亰app > 新葡亰数据库 > 正文

动用mysql忽略叁个要么两个目录,2.用 mysql 命令得

一. 使用sql提示

         sql 提示(sql hint)是优化数据库的一个重要手段, 是在sql语句中加入一些人为的提示来达到优化操作的目的。

  1.1 use index
    在查询语句中表名的后面,添加use index 强制mysql使用该索引,不考虑其它索引。

EXPLAIN SELECT * FROM city USE INDEX(ix1) WHERE city_id=1;

  1.2 ignore index
    在查询语句中表名的后面,添加ignore index,使用mysql忽视一个或者多个索引。

EXPLAIN SELECT * FROM city IGNORE INDEX(ix1) WHERE  city_id=14;

  1.3 force index
    在查询语句中表名的后面,添加force index,当mysql不走索引时,强制走索引。

-- 某些情况下,有索引但mysql不走索引,强制使用
EXPLAIN SELECT * FROM city FORCE INDEX (PRIMARY) WHERE  city_id>0;

CentOS下Mysql 优化

1.调试 mysql 命令方法: mysql>explain select * from t1 G 或: mysql>desc select * from t1 G 主要查看以下属性: (1)type 是否用到索引 (2)key 索引名称 (3)rows 查询影响的行数(越少说明优化的越好) 2.用 mysql 命令获得一些服务优化信息: (1)show status like 'com_%'; #主要看 com_select,com_insert,com_update,com_delete,查到都是本次服务启动后的会话结果,当然其中包括所有的数据为存储类型 (2)就想查看 innodb 的这些信息: show status like 'innodb_rows_%'; 主 要 查看 innodb_rows_read,innodb_rows_inesrted,innodb_rows_updated,innodb_rows_deleted 这四个参数 (3)show status like 'connections'; #查看连接 mysql 服务器的次数 (4)show status like 'uptime'; #mysql 服务器的工作时间 (5)show status like 'slow_queries'; #慢查询的次数 3.索引优化问题: (1)一般的要加索引的字段为:where 后面字段 (2)order by 后面的字段 (3)like 后 3%这种形式而不是%3 这种形式 (4)or 前后字段都要用到索引 (5)复合索引的第一个字段 (6)创建索引:mysql>create index ind_name on t1(name); (7)查看索引使用情况: mysql>show status like 'handler_read%'; #如果其中 handler_read_rnd_next 的值高则索引低效,需要去优化索引,而如果低则说明索引高效. 4.常用的 sql 表的导入导出优化: (1)mysql>alter table t1 disable keys mysql>load data infile 'c:/t1.txt'; mysql>alter table t1 enable keys; (2)mysql>set unique_checks=0; mysql>load data...; msyql>set unique_checks=1; (3)mysql>autocommit=0; mysql>load data...; mysql>autocommit=1; 5.优化 insert 语句,最好用一行多值的这种形式: insert into t1(name) values(1),(2),(3) 6.当一个文件装载一个表时,用 load data infile 要比很多 insert 语句快 20 倍,而 mysqlimport 这种导入也很快,因为它用的本来就是 load data infile 这种函数接口. 7.查询包括 group by 但如何避免排序结果的消耗: mysql>desc select id from t1 group by id order by null G 8.优化嵌套查询: (1)mysql>desc select * from t1 where s_id not in (select id from comany2) G (2)mysql>desc select * form t1 left join company2 on t1.s_id=comany2.id where t1.s_id is null G #以上 left join 这种形式明显快于 not in ()这种子查询,因为 join 不需要在内存中建立临时表来完成这个逻辑上需要两个步骤的查询工作. 9.sql 索引提示: (1)use index mysql>desc select * from t1 use index (ind_id) where id=3 G (2)ignore index mysql>desc select * from t1 ignore index (ind_id) where id=3G (3)force index mysql>desc select * from t1 force index (ind_id) where id>0 G #注意这种 where 后这种带范围判断的字段的索引是不起作用的,但可以人为的强制去用 index,虽然对影响 rows 起不到作用,这是 mysql 留给用户的一个自行选择计划的权力而已. 10.与删除表有关的优化: 1)用 delete 来删除 mysql> delete from t1; Query OK, 10 rows affected (0.01 sec) 2)用 truncate 来删除 mysql> truncate table t2; Query OK, 0 rows affected (0.00 sec) #用两种方法都可以把表中数据清空,但是用第二种明显比第一种速度要快,而且节省内存.

优化 1.调试 mysql 命令方法: mysqlexplain select * from t1 G 或: mysqldesc select * from t1 G 主要查看以下属性: (1)type 是否用到索引 (2)key 索...

二 .优化数据库对象

  1. 优化表的数据类型
    在mysql中,可以使用函数procedure analyse()对当前应用的表进行分析。对表列中的数据类型给出合理的改进建议,用户可以根据实际情况来考虑。
  例如:下面生产库中有一个菜单表,字段类型及长度如下:

图片 1

 -- 使用procedure analyse()分析
SELECT * FROM Adm_Menu PROCEDURE ANALYSE(16,256);

    下面remark 字段里面值的最大长度的是30长度, 所以系统建议给出30长度:

图片 2

  2. 通过折分提高表的访问效率
    折分可以是垂直拆分和水平拆分,这是一种设计思路,这篇不讲。

  3. 逆规范化
    逆规范化也叫提高表的冗余,有利于提高查询性能。这是一种设计思路,这篇不讲。

  4. 使用中间表提高统计查询速度
    比如有一个大表记录了客户的每天消费记录,需要按月统计总消费金额, 可以放入到中间表,减轻大表的频繁查询. 这是一种设计思路,这篇不讲。

 

本文由澳门新葡亰app发布于新葡亰数据库,转载请注明出处:动用mysql忽略叁个要么两个目录,2.用 mysql 命令得

关键词: