1.获取表的存储引擎相关信息:show table status like 'tableName';
2.检查表错误:check table tableName;
3.修复表:repair table tableName ; (MyISAM不支持)。
4.表存储引擎的改变:alter table tableName engine=new_engine_name;(转换过程耗时长);
5.当查询大于某一个字段的记录的个数时,可以采用采用相反的方法获取。先查询表的总数,然后查询该字段小于等于某个值的总数,两者做减法处理。这样能提高查询效率。ex:select (select count(*) from dm_field)-count(*) from user
where id<=10.查询user中id>10的总数。
6. 查询某个字段的某个值的统计个数的查询办法:
select count(alias='标题' or null),count(alias='内容' or null)
from chapter;
select alias,count(alias) from chapter where alias in('标题','内容')
group by alias;
select sum(if(alias='标题' ,1,0),sum(if(alias='内容' ,1,0) )
from chapter;
7.MySQL 全文搜索办法:(有的表不能使用全文索引)
7.1 给字段添加全文索引:ALTER TABLE app_book add FULLTEXT KEY(name);
7.2 查询:查询app_book中字段为name,description中命中关键词故事的记录。
select id,name from app_book where match(name,description) against ('故事');
7.3 布尔全文搜索:
china 含有 china 行排名较高;
~china 含有china 行排名较低;
+china 行必须还有china;
-china 行不含有china;
china* 含有以china打头的行排名较高;
ex:select id,name from app_book where match(title,description) against('+china+shenzhen' in boolean mode);
精确匹配词语:select id,name from app_book where match(title) against('"笑傲江湖 金庸"' in boolean mode);//短语搜索非常慢。如果搜索的短语常见 就没有like查询效率高。
7.4 在对联接多个表的结果进行全文检索,是很慢的。对全文索引进行添加,修改,删除都是比较慢。全文搜索索引也会引起碎片,影响服务器优化查询语句的方式。
7.5 select * from app_book where match(title) against('china') and id >9;这样的查询性能也很慢。但是可以有变通的方法。
7.6 全文索引采用的是双重平衡树结构(Double B-Tree);
7.7 若在导入大量数据并希望使用全文索引,那么在导入数据前,先禁用全文索引。Disable keys ; 导入完毕后再使用enable keys;因为插入每一行都要更新索引,这样还可以避免碎片的产生。
8.binlog指定时间范围的日志转化为SQL脚本:
mysqlbinlog mysql-bin.000009 --start-date="2011-09-15 10:15:00" --stop-date="2011-09-27 10:30:59" >all.sql