索引,主键 假如我查询中要用到2个字段排序(order by time desc,id)这两字段排序较频繁是不是要在time,id上建聚集索引。还有分页时用到id (也还较频繁),id 也需要建索引 现在问题是不知道聚集索引如何分配,各位给个方案。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果... where id=23如这类查询很多,那么建议给id聚集索引. 而且,现在很多分页算法,都是利用id实现的time列给普通索引就可以了。 在考虑是否为一个列创建索引时,应考虑被索引的列是否以及如何用于查询中。索引对下列查询很有帮助: 搜索符合特定搜索关键字值的行(精确匹配查询)。精确匹配比较是指查询使用 WHERE 语句指定具有给定值的列条目。例如: WHERE emp_id = 'VPA30890F'搜索其搜索关键字值为范围值的行(范围查询)。范围查询是指查询指定其值介于两个值之间的任何条目。例如: WHERE job_lvl BETWEEN 9 and 12 或WHERE job_lvl >= 9 and job_lvl <= 12在表 T1 中搜索根据联接谓词与表 T2 中的某个行匹配的行(索引嵌套循环联接)。在不进行显式排序操作的情况下产生经排序的查询输出,尤其是经排序的动态游标。在不进行显式排序操作的情况下,按一种有序的顺序对行进行扫描,以允许基于顺序的操作,如合并联接和流聚合。以优于表扫描的性能对表中所有的行进行扫描,性能提高是由于减少了要扫描的列集和数据总量(该查询有覆盖索引可供使用)。搜索插入和更新操作中重复的新搜索关键字值,以实施 PRIMARY KEY 和 UNIQUE 约束。搜索已定义了 FOREIGN KEY 约束的两个表之间匹配的行。 使用 LIKE 比较进行查询时,如果模式以特定字符串如"abc%"开头,使用索引则会提高效率;如果模式以通配符如"%xyz"开头,则索引不起作用。在很多查询中,索引可以带来多方面的好处。例如,索引除了可以覆盖查询外,还使得可以进行范围查询。SQL Server 可以在同一个查询中为一个表使用多个索引,并可以合并多个索引(使用联接算法),以便搜索关键字共同覆盖一个查询。另外,SQL Server 会自动确定利用哪些索引进行查询,并且能够在表被改动时确保该表的所有索引都得到维护。其它索引设计准则设计索引时还要考虑的其它准则包括: 一个表如果建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为在表中的数据更改时,所有索引都须进行适当的调整。另一方面,对于不需要修改数据的查询(SELECT 语句),大量索引有助于提高性能,因为 SQL Server 有更多的索引可供选择,以便确定以最快速度访问数据的最佳方法。覆盖的查询可以提高性能。覆盖的查询是指查询中所有指定的列都包含在同一个索引中。例如,如果在一个表的 a、b 和 c 列上创建了组合索引,则从该表中检索 a 和 b 列的查询被视为覆盖的查询。创建覆盖一个查询的索引可以提高性能,因为该查询的所有数据都包含在索引自身当中;检索数据时只需引用表的索引页,不必引用数据页,因而减少了 I/O 总量。尽管给索引添加列以覆盖查询可以提高性能,但在索引中额外维护更多的列会产生更新和存储成本。对小型表进行索引可能不会产生优化效果,因为 SQL Server 在遍历索引以搜索数据时,花费的时间可能会比简单的表扫描还长。应使用 SQL 事件探查器和索引优化向导帮助分析查询,确定要创建的索引。为数据库及其工作负荷选择正确的索引是非常复杂的,需要在查询速度和更新成本之间取得平衡。窄索引(搜索关键字中只有很少的列的索引)需要的磁盘空间和维护开销都更少。而另一方面,宽索引可以覆盖更多的查询。确定正确的索引集没有简便的规则。经验丰富的数据库管理员常常能够设计出很好的索引集,但是,即使对于不特别复杂的数据库和工作负荷来说,这项任务也十分复杂、费时和易于出错。可以使用索引优化向导使这项任务自动化。 一般id设为主键,也就自动设置了聚集索引,time上建非聚集索引。 ID聚集索引,ID,TIME 复合 ID非聚集索引,ID,TIME 复合聚集索引 也是一种方案 要看具体的执行计划 可楼主是先time 排序后 id 这样效率应该不高吧 SQL语句居然错了,没看到是哪错了。知道的来看下 INSERT INTO select from alter数据库报错 用查询可以得到结果,但建立存储过程,结果就不对了。 高分跪求一SQL查询语句,急急急 SQL查询类别语句 关于exec()的传变量参数的问题,请问如何写?请各位指教,表示感谢了。 明天交公 求一个SQL语句 SQL SERVER 数据趋势分析 请问SQL SERVER的bit类型对应VB里的什么类型? 这个查询如何写 SQL2005有没有查询触发器?
WHERE emp_id = 'VPA30890F'
搜索其搜索关键字值为范围值的行(范围查询)。范围查询是指查询指定其值介于两个值之间的任何条目。例如:
WHERE job_lvl BETWEEN 9 and 12
或WHERE job_lvl >= 9 and job_lvl <= 12
在表 T1 中搜索根据联接谓词与表 T2 中的某个行匹配的行(索引嵌套循环联接)。
在不进行显式排序操作的情况下产生经排序的查询输出,尤其是经排序的动态游标。
在不进行显式排序操作的情况下,按一种有序的顺序对行进行扫描,以允许基于顺序的操作,如合并联接和流聚合。
以优于表扫描的性能对表中所有的行进行扫描,性能提高是由于减少了要扫描的列集和数据总量(该查询有覆盖索引可供使用)。
搜索插入和更新操作中重复的新搜索关键字值,以实施 PRIMARY KEY 和 UNIQUE 约束。
搜索已定义了 FOREIGN KEY 约束的两个表之间匹配的行。
使用 LIKE 比较进行查询时,如果模式以特定字符串如"abc%"开头,使用索引则会提高效率;如果模式以通配符如"%xyz"开头,则索引不起作用。在很多查询中,索引可以带来多方面的好处。例如,索引除了可以覆盖查询外,还使得可以进行范围查询。SQL Server 可以在同一个查询中为一个表使用多个索引,并可以合并多个索引(使用联接算法),以便搜索关键字共同覆盖一个查询。另外,SQL Server 会自动确定利用哪些索引进行查询,并且能够在表被改动时确保该表的所有索引都得到维护。其它索引设计准则
设计索引时还要考虑的其它准则包括: 一个表如果建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为在表中的数据更改时,所有索引都须进行适当的调整。另一方面,对于不需要修改数据的查询(SELECT 语句),大量索引有助于提高性能,因为 SQL Server 有更多的索引可供选择,以便确定以最快速度访问数据的最佳方法。
覆盖的查询可以提高性能。覆盖的查询是指查询中所有指定的列都包含在同一个索引中。例如,如果在一个表的 a、b 和 c 列上创建了组合索引,则从该表中检索 a 和 b 列的查询被视为覆盖的查询。创建覆盖一个查询的索引可以提高性能,因为该查询的所有数据都包含在索引自身当中;检索数据时只需引用表的索引页,不必引用数据页,因而减少了 I/O 总量。尽管给索引添加列以覆盖查询可以提高性能,但在索引中额外维护更多的列会产生更新和存储成本。
对小型表进行索引可能不会产生优化效果,因为 SQL Server 在遍历索引以搜索数据时,花费的时间可能会比简单的表扫描还长。
应使用 SQL 事件探查器和索引优化向导帮助分析查询,确定要创建的索引。为数据库及其工作负荷选择正确的索引是非常复杂的,需要在查询速度和更新成本之间取得平衡。窄索引(搜索关键字中只有很少的列的索引)需要的磁盘空间和维护开销都更少。而另一方面,宽索引可以覆盖更多的查询。确定正确的索引集没有简便的规则。经验丰富的数据库管理员常常能够设计出很好的索引集,但是,即使对于不特别复杂的数据库和工作负荷来说,这项任务也十分复杂、费时和易于出错。可以使用索引优化向导使这项任务自动化。
要看具体的执行计划
这样效率应该不高吧