论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Sql Server教程
Tag:注入,存储过程,分页,安全,优化,加密,索引,日志,压缩,base64,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,触发器,socket,安装,sqlserver2000,sqlserver2005,sqlserver2008,视频教程

Sql Server教程:如何让数据库变快

文章类别:Sql Server | 发表日期:2012-3-30 9:34:19

Sql Server教程:让数据库变快的10个建议

    大多数网站的内容都存在数据库里,用户通过请求来访问内容。数据库非常的快,有许多技巧能让你优化数据库的速度,使你不浪费服务器的资源。今天在这篇文章中,给大家介绍了十个优化数据库速度的技巧。

1. 小心设计数据库
   
第一个技巧也许看来理所当然,但事实上大部分数据库的问题都来自于设计不好的数据库结构。

   
新建数据库时,应当将信息储存在不同的表里,采用标准的命名方式,并采用主键。

2. 清楚你需要优化的地方
   
如果想优化某个查询语句,清楚的知道这个语句的结果是非常有帮助的。采用EXPLAIN语句,你将获得很多有用的信息,下面来看个例子:

EXPLAIN SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column;

3. 最快的查询语句…是那些你没发送的语句
    每次向数据库发送一条语句,你都会用掉很多服务器资源。所以在很高流量的网站中,最好的方法是将你的查询语句缓存起来。

有许多种缓存语句的方法,下面列出了几个:
 
AdoDB: AdoDB是一个PHP的数据库简化库。使用它,你可以选用不同的数据库系统(MySQL, PostGreSQL, Interbase等等),而且它就是为了速度而设计的。AdoDB提供了简单但强大的缓存系统。还有,AdoDB拥有BSD许可,你可以在你的项目中免费使用它。对于商业化的项目,它也有LGPL许可。

   
Memcached:Memcached是一种分布式内存缓存系统,它可以减轻数据库的负载,来加速基于动态数据库的网站。

   
CSQL Cache: CSQL缓存是一个开源的数据缓存架构。我没有试过它,但它看起来非常的棒。

4. 不要select你不需要的

   
获取想要的数据,一种非常常见的方式就是采用*字符,这会列出所有的列。

SELECT * FROM wp_posts;

   
然而,应该仅列出你需要的列,如下所示。如果在一个非常小型的网站,譬如,一分钟一个用户访问,可能没有什么分别。然而如果像Cats Who Code这样大流量的网站,这就为数据库省了很多事。

SELECT title, excerpt, author FROM wp_posts;

5. 采用LIMIT
   
仅获得某个特定行数的数据是非常常见的。譬如博客每页只显示十篇文章。这时,你应该使用LIMIT,来限定你想选定的数据的行数。

   
如果没有LIMIT,表有100,000行数据,你将会遍历所有的行数,这对于服务器来说是不必要的负担。

SELECT title, excerpt, author FROM wp_posts LIMIT 10;

6. 避免循环中的查询
    当在PHP中使用SQL时,可以将SQL放在循环语句中。但这么做给你的数据库增加了负担。

下面的例子说明了“在循环语句中嵌套查询语句”的问题:foreach ($display_order as $id => $ordinal) {
$sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";

mysql_query($sql);

}

或者可以这么做:

UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)

6. 采用join来替换子查询

    程序员可能会喜欢用子查询,甚至滥用。下面的子查询非常有用:

SELECT a.id,

(SELECT MAX(created)

FROM posts

WHERE author_id = a.id)

AS latest_post FROM authors a

   
虽然子查询很有用,但join语句可以替换它,join语句执行起来更快。

SELECT a.id, MAX(p.created) AS latest_post

FROM authors a

INNER JOIN posts p

ON (a.id = p.author_id)

GROUP BY a.id

8. 小心使用通配符
   
通配符非常好用,在搜索数据的时候可以用通配符来代替一个或多个字符。我不是说不能用,而是,应该小心使用,并且不要使用全词通配符(full wildcard),前缀通配符或后置通配符可以完成相同的任务。

   
事实上,在百万数量级的数据上采用全词通配符来搜索会让你的数据库当机。

#Full wildcard

SELECT * FROM TABLE WHERE COLUMN LIKE '%hello%';

#Postfix wildcard

SELECT * FROM TABLE WHERE COLUMN LIKE 'hello%';

#Prefix wildcard

SELECT * FROM TABLE WHERE COLUMN LIKE '%hello';

9. 采用UNION来代替OR

    下面的例子采用OR语句来:SELECT * FROM a, b WHERE a.p = b.q or a.x = b.y;

   
UNION语句,你可以将2个或更多select语句的结果拼在一起。下面的例子返回的结果同上面的一样,但是速度要快些:

   
SELECT * FROM a, b WHERE a.p = b.q UNION

   
SELECT * FROM a, b WHERE a.x = b.y

10. 使用索引
   
数据库索引和你在图书馆中见到的索引类似:能让你更快速的获取想要的信息,正如图书馆中的索引能让读者更快的找到想要的书一样。
   
可以在一个列上创建索引,也可以在多个列上创建。索引是一种数据结构,它将表中的一列或多列的值以特定的顺序组织起来。

   
下面的语句在Product表的Model列上创建索引。这个索引的名字叫作idxModel

视频教程列表
文章教程搜索
 
Sql Server推荐教程
Sql Server热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058