当前位置:Gxlcms > 数据库问题 > MySQL语句优化

MySQL语句优化

时间:2021-07-01 10:21:17 帮助过:5人阅读

    WHERE moneys=22 不会使用索引

  如果OR前的条件中的列有索引,后面的列没有索引,那么涉及的索引都不会被用到。只有or前后的字段都加了索引,查询才可能用到索引

  如果列类型是字符串,但是把数字当作条件,索引不会被用到

  handler_read_rnd_next的值越高,则意味着查询效率越低,并应该建立索引补救。SHOW STATUS LIKE ‘handler_read%‘

三、表优化

  CHECK TABLE table_name; 分析表是否有错误,例如表被删除后,依赖他的视图将无效

  OPTIMIZE TABLE table_name; 如果已经删除了表的一大部分,或者如果已经对含有可变长度行的表进行了多次改动,则需要做定期优化。这个命令可以将表中的空间碎片进行合并,对MyISAM InnoDB有效

四、常用SQL的优化 

  当数据量比较大的时候,导入导出表会比较耗费系统资源,应该使用 infile和outfile
  ? load data 查看帮助
  LOAD DATA INFILE ‘data.txt‘ INTO TABLE db2.my_table 快速导入
  示例:load data infile ‘e:/sql.txt‘ into table book(bookname,publisher,author,price,ptime,pic,detail);

  如果有索引的话,可以先关闭索引,在导入数据,然后打开索引 这样导入会更快DISABLE KEYS/ENABLE KEYS 关闭打开表的非唯一索引,对InnoDB无效
  ALTER TABLE table_name DISABLE KEYS
  导入数据
  ALTER TABLE table_name ENABLE KEYS

  关闭唯一索引以提高导入效率(前提是要确保数据不重复)
  SET UNIQUE_CHECKS=0 关闭唯一校验
  SET UNIQUE_CHECKS=1 打开唯一校验

  针对innodb表可以关闭自动提交以提高导入效率(因为每导入一行都要校验是否提交)
  SET AUTOCOMMIT=0 关闭自动提交
  SET AUTOCOMMIT=0 打开自动提交

  ? outfile

  SELECT * FROM table_name INTO OUTFILE ‘file_name‘ 快速导出

  group by分组后默认根据分组列升序排列,如果不想排序可以使用 order by null禁止排序

  尽量避免使用子查询,用连接查询来代替,因为子查询不会用到索引

 

MySQL语句优化

标签:

人气教程排行