查询优化与视图

查询记录可以有多种方法,但是不同的方法在效率上有着千差万别.

在记录多的情况下,尤为明显.

下面举一个例子
表1 articles:字段(id   title    time    posterID)

表2  users  :字段(id    name    password)

查询某人编辑的所有文章的标题.

假设表articles 有3000条记录   users有100条记录

方法一:
SELECT title  FROM article,users  WHERE posterID = users.id AND users.name='XX';

方法二:
SELECT title FROM article WHERE posterID IN (SELECT id FROM users WHERE name = 'XX');

这两个语句的执行结果是一样的.但效果却有很大的区别

方法一使用链接,计算这个语句是在3000 * 100 = 30 0000 记录中查找与条件匹配的记录.

方法二很简单,先是在表users  100条记录中查找匹配的id,然后再在article 3000条记录中找
即3000 + 100 =3100

相差近100倍.如果有索引那更快.


---------------------------------------------------------------------------------------------------------------------

在n种中你选择了最好的方法了,但是这是最好的方法吗?

如果哪天你发现,还有个更好的方法那怎么办?

改!那么你就要把所有的程序里的sql语句重新写过.烦!

而最好的办法是,建立一个视图.

程序的所有操作基于视图.像上例 可以建立一个 仅 title字段的视图.

CREATE VIEW  v_title AS ( SELECT title  FROM article,users  WHERE posterID = users.id AND users.name='XX';)

而程序设计中都用select title from v_title;

当发现一个更好的查询方法后,你只要修改视图.而程序不用修改,就能运行了.

CREATE VIEW  v_title AS (SELECT title FROM article WHERE posterID IN (SELECT id FROM users WHERE name = 'XX'))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章