首页 学校简介 专业设置 技术交流 学员感想 师资力量 万博优势 联系我们 在线报名
网络专业
软件专业
网站专业
学前教育专业
首页>技术交流>正文
于mysql处理百万级以上的数据时如何提高其查询速度的方法
作者: 日期:2012-2-10 14:23:43

实际项目中发现当mysql表的数据量达到百万级时,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍。曾经测试对一个包含400多万条记录(有索引)的表执行一条条件查询,其查询时间竟然高达40几秒,相信这么高的查询延时,任何用户都会抓狂。因此如何提高sql语句查询效率,显得十分重要。以下是网上流传比较广泛的30SQL查询语句优化方法:

 1、应尽量避免在 where 子句中使用!=<>操作符,否则将引擎放弃使用索引而进行全表扫描。

 2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where order by 涉及的列上建立索引。

 3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:

     select id from t where num is null

     可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

     select id from t where num=0

 4、尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

     select id from t where num=10 or num=20

     可以这样查询:

     select id from t where num=10

     union all

     select id from t where num=20

 5、下面的查询也将导致全表扫描:(不能前置百分号)

     select id from t where name like ‘%c%’

    若要提高效率,可以考虑全文检索。

 6in not in 也要慎用,否则会导致全表扫描,如:

     select id from t where num in(1,2,3)

     对于连续的数值,能用 between 就不要用 in 了:

     select id from t where num between 1 and 3

 7、如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

     select id from t where num=@num

     可以改为强制查询使用索引:

     select id from t with(index(索引名)) where num=@num

 8、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:

     select id from t where num/2=100

     应改为:

     select id from t where num=100*2

 9、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

     select id from t where substring(name,1,3)=abc’–nameabc开头的id

     select id from t where datediff(day,createdate,2005-11-30)=0–’2005-11-30′生成的id

     应改为:

     select id from t where name like ‘abc%’

     select id from t where createdate>=2005-11-30 and createdate<2005-12-1

 10、不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

 

本新闻共3页,当前在第1页  1  2  3  

下一篇:防火墙的功能
上一篇:解决IE6、IE7、IE8、Firefox兼容的两种方案
清华万博
点击咨询
咨询电话
开班咨询 开班咨询
清华万博
版权所有:邯郸市万博网络教育学校 冀ICP备07024482号
邮箱:mjj0621@126.com 地址:邯郸市和平路396号财富大厦9层
咨询电话:0310-2051222、15350523025 QQ:1761008185
收藏与分享