优化SQL语句,提高数据库执行效率的8条建议

网站(动态)的数据一般情况下都会存储在数据库中(例如MS SQL、My SQL等),当用户访问网站时,会根据一些缺省的或用户提交的参数(比如网址后面可能会带有”index.php?cat=design” )来查询或更新数据库,虽然数据库的运行速度很快,但在一些不恰当的数据库操作的情况下,会增加数据库运行占用的系统资源,严重时可能会拖垮整个数据库的运行。

下面汇总了10条常见的SQL语句问题点及优化建议

1. 尽量减少 * 的使用,只查询你需要的字段内容。

优化前:

SELECT * FROM wp_posts;

优化后:

SELECT title, excerpt, author FROM wp_posts;

2. 记得使用 LIMIT , 限制查询的数量。

优化后:

SELECT title, excerpt, author FROM wp_posts LIMIT 10;

LIMIT 的使用方法:
LIMIT OFFSET,NUMBER ; offset代表偏移量,number代表从offset开始查询的数量。
例如:
LIMIT 10 ; 代表偏移量为0,查询条数为10条。
LIMIT 10,12 ; 代表偏移量为10,查询条数为12条。

3. 避免在程序语言的循环语句(例如 PHP 的foreach、while 等)中使用SQL语句

优化前:

foreach ($display_order as $id => $ordinal) {
$sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";}

优化后:

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)

具体请参考:如何在数据库中一次更新多行多字段

4. 使用join代替子查询(subqueries)语句

优化前:

SELECT a.id,
(SELECT MAX(created)
FROM posts
WHERE author_id = a.id)
AS latest_post FROM authors a

优化后:

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 

5. 尽量减少通配符的使用,特别是前缀通配符(通配符放在前面)

#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';

6. 使用union代替or查询语句

优化前:

SELECT * FROM a, b WHERE a.p = b.q or a.x = b.y;

优化后

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

7. 记得使用索引(index)

CREATE INDEX idxModel ON Product (Model);

8. 用>=替代>

优化前:

SELECT * FROM EMP WHERE DEPTNO >3

优化后:

SELECT * FROM EMP WHERE DEPTNO >=4
除非注明,本博客文章均为原创,转载请以链接形式标明本文地址
原创文章如转载,请注明:转载自 任鸟飞网页设计 [ http://www.renniaofei.com/ ]
本文链接地址: http://www.renniaofei.com/code/8-useful-tips-to-optimize-and-speed-up-your-website-database/
引用通告地址 Trackback URL:直接在本文链接地址后添加 trackback/
任鸟飞

任鸟飞网页设计网创办者 主要关注网页设计,网站建设,图形图像设计。 Twitter @renniaofei QQ:29900684

发表评论

电子邮件地址不会被公开。 必填项已被标记为 *

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>