欢迎来到天天文库
浏览记录
ID:29987219
大小:78.04 KB
页数:4页
时间:2018-12-25
《mysqlsql百万级数据库优化方案》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、mysqlsql百万级数据库优化方案www.111cn.net2010-04-25编辑:kp12345我要投递文章稿1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。 2.应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: selectidfromtwherenumisnull 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: selectidfromtwherenum=0 3.应尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使
2、用索引而进行全表扫描。 4.应尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: selectidfromtwherenum=10ornum=20 可以这样查询: selectidfromtwherenum=10 unionall selectidfromtwherenum=20 5.in和notin也要慎用,否则会导致全表扫描,如: selectidfromtwherenumin(1,2,3) 对于连续的数值,能用between就不要用in了: selectidfromtwherenumbetween1and3
3、 6.下面的查询也将导致全表扫描: selectidfromtwherenamelike'%abc%' 若要提高效率,可以考虑全文检索。 7.如果在where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: selectidfromtwherenum=@num 可以改为强制查询使用索引: selectidfromtwith(inde
4、x(索引名))wherenum=@num 8.应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: selectidfromtwherenum/2=100 应改为: selectidfromtwherenum=100*2 9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: selectidfromtwheresubstring(name,1,3)='abc'--name以abc开头的id selectidfromtwheredatediff(
5、day,createdate,'2005-11-30')=0--‘2005-11-30’生成的id 应改为: selectidfromtwherenamelike'abc%' selectidfromtwherecreatedate>='2005-11-30'andcreatedate<'2005-12-1' 10.不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且
6、应尽可能的让字段顺序与索引顺序相一致。 12.不要写一些没有意义的查询,如需要生成一个空表结构: selectcol1,col2into#tfromtwhere1=0 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: createtable#t(...) 13.很多时候用exists代替in是一个好的选择: selectnumfromawherenumin(selectnumfromb) 用下面的语句替换: selectnumfromawhereexists(select1frombwherenum=a.num) 14.并不是所有索引对查询都有
7、效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 15.索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update的效率,因为insert或update时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
此文档下载收益归作者所有