时间: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有效
当数据量比较大的时候,导入导出表会比较耗费系统资源,应该使用 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语句优化
标签: