查询记录可以有多种方法,但是不同的方法在效率上有着千差万别.
在记录多的情况下,尤为明显.
下面举一个例子
表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'))
查询优化与视图
最新推荐文章于 2024-07-06 18:46:32 发布