❶ mysql中sql语句中的排序语句是不是也要用索引
索引的使用,不是越多越好,个人认为厅脊如果表不大的话,完全可以不加索引,如果表确实够大查戚型询速度慢的话,在一个主要的查询字段添加索引就可以,比如说自扮仔渗己生成一个201003020930222这样的一个时间字段,你在每次查询的时候,让这个字段索引做必须的查询条件就可以,order by不需要添加索引了。
❷ sql server 怎么排序
排序可以是升序的 (ASC),也可以是降序的 (DESC)。如果未指定是升序还是降序,就假定为 ASC。
下面的查询返回按 ProctID 升序排序的结果:
代码如下 复制代码
USE AdventureWorks2008R2;
GO
SELECT ProctID, ProctLine, ProctModelID
FROM Proction.Proct
ORDER BY ProctID;
如果 ORDER BY 子句中指定了多个列,则排序是嵌套的。下面的语句先按产品子类别降序排序 Proction.Proct 表中的行,然后在每个产品子类别中按 ListPrice 升序排序这些行。
代码如下 复制代码
USE AdventureWorks2008R2;
GO
SELECT ProctID, ProctSubcategoryID, ListPrice
FROM Proction.Proct
ORDER BY ProctSubcategoryID DESC, ListPrice;
问题
同一个查询的结果集为什麽有时候是按他想要的顺序排列,有时候又不是,或者是在SQL2000里是这个顺序,到了SQL2005/2008又是那个顺序?
其实,只要语句里没有指定“order by”,SQLSERVER并不会按照顺序返回的。有可能你的表里有一个字段已经建立了索引
你想结果集按照那个建立了索引的字段排序,那么你不指定“order by”是没有问题的,因为表的存储顺序就是按照那个字段
的顺序排好序了,所以可以不指定“order by”,但是如果你没有在想排序的那个字段建立索引,或者在SQL2000里建立了
索引,而在SQL2005/2008里没有建立索引,那么就要明确地用“order by”指定。如果你没有指定,哪怕一模一样的查询,
结果集顺序这一次和上一次不一样是很正常的。
❸ SQL 索引问题
组合索引的问题,如果对5个字段进行查询的话当然是含李闹把五个字段都包含进去能使查询的效率增加的啦,你得问题:‘ 一个索引 到底分别给内部的字段 都建立索引,还是给内部字段的组合 做为标识 进行索引。’其实是这样的,即使你的字段再多,索引的排列方式都是按照第一个字段的排序来进行的,其他字段是没有排序的,就扰厅是说你根本不需要考虑其他字段的情况,只考虑你第一个字段应该要排什么,而为什么五个字段都包含在索引里面能使查询效率谈罩增高的原因是如果你能在索引中就能得到你所需要的结果集的话,oracle就不会在你得数据文件中检索你的数据,这样会大大减少IO,增加你的检索的效率。
❹ SQL聚集索引:“原来的数据会按照索引键排序后,重新存在硬盘上”什么意思
聚集索引: 该索引中键值的逻辑顺序决定了表中相应行的物理顺序。如果用 新华字典 作例子来一个例子的话。 [拼音]就可以看作是聚集索引 例如 吖、阿、啊 在字典的最前面。 左、作、坐 在字典的最后面。 拼音[逻辑顺序]很接近,在字典中页数的位置[物理顺序]也很接近。
非聚集索引: 非聚集索引与聚集索引一样有 B 树结构,但是有两个重大差别: 数据行不按非聚集索引键的顺序排序和存储。 非聚集索引的叶层不包含数据页。 相反,叶节点包含索引行。每个索引行包含非聚集键值以及一个或多个行定位器, 这些行定位器指向有该键值的数据行(如果索引不唯一,则可能是多行)。如果用 新华字典 作例子来一个例子的话。 [笔画]就可以看作是非聚集索引 例如 化 仇 仃 仅 仂 这几个字,都是 单人旁,笔画数相同的。 笔画[逻辑顺序]很接近,在字典中页数的位置[物理顺序]则在不同的位置上。
❺ 建立索引 sql 查询时是否会自动排序
会的,建立索引的时候,数据库肆陵就会按照索引的字段,将所有的数据重新排序雹雹埋,当有新增数据的源蚂时候,数据库会找到对应的位置插入,而不是简单的放到最后
❻ sql中表的数据的排序方式如何修改
系统默认是以聚集索引排序,主键默认是聚集索引,也可手动改成非聚集索引,你可以添加一列标识列,就是自增列,然后把聚集索引给这列,系统就会默认按添加顺序排了
❼ sql分表,索引,排序速度快
查询知冲桐快慢主决的因素有很多,存储碎片、数据量大属于I/O类问题;表结构设计、查询语句属于技术是否熟练(经验)问题。对于你的分表快还是索引快的这个问题本身就是有问题的:
在建立数据表的时候,索引是必须的,主键就是判塌唯一索引,搭坦
我认为需要关注查询快慢的时候,必定是单表数据量越来越大,或是已预见数据量会越来越大,例如日志表、流水记录等,要不就是查询时关联的表比较多。
如果是像配置类数据表数据量有限的表,加不加除了主键以外索引影响不大。
基于单数据库来说,
那么数据量大,增速快的表要想加查询速度的首先索引是必须的,再加上分区或是分表才能有效的提升效率,有必要还可以做读写分离,
但是在做分表时怎么分就要讲究了,分表可以按字段(纵向)分,也可以按某(些)字段的值特性(横向)去分,总之要尽量达到在同一分表中的数据特性相同,在生成SQL时,代码可以决定向哪几个分表查,达到避免查询无关的分表,查询的表越少,需要扫描的记录越少,效率肯定越高,如果达不到减少读表和记录的话,分表不但不会变快,反而变慢。
即时原创回答,个人的一些体验,仅供参考
❽ 如何在 SQL 数据库优化 索引,SQL索引优化
1、主键就是聚集索引
2、只要建立索引就能显着提高查询速度
3、把所有需要提高查询速度的字段都加进聚集索引,以提高查询速度
(四)其他书上没有的索引使用经验总结
1、用聚合索引比用不是聚合索引的主键速度快
2、用聚合索引比用一般的主键作order by时速度快,特别是在小数据量情况下
3、使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个
4 、日期列不会因为有分秒的输入而减慢查询速度
(五)其他注意事项
1. 不要索引常用的小型表
2. 不要把社会保障号码(SSN)或身份证号码(ID)选作键
3. 不要用用户的键
4. 不要索引 memo/notes 字段和不要索引大型文本字段(许多字符)
5. 使用系统生成的主键
二、改善SQL语句
1、Like语句是否属于SARG取决于所使用的通配符的类型
2、or 会引起全表扫描
3、非操作符、函数引起的不满足SARG形式的语句
4、IN 的作用相当与OR
5、尽量少用NOT
6、exists 和 in 的执行效率是一样的
7、用函数charindex()和前面加通配符%的LIKE执行效率一样
8、union并不绝对比or的执行效率高
9、字段提取要按照“需多少、提多少”的原则,避免“select *”
10、count(*)不比count(字段)慢
11、order by按聚集索引列排序效率最高
12、高效的TOP
❾ sql server 索引排序问题
如果需要降序排序,使用order by desc,这是默认的,不需要设置也是降序,一般情况下按主键降序排列,
如果要按照某个列降序,就是order by 列名 desc ,升序同理!
❿ sql如何建立降序索引 和删除索引
建立降序索引语法:
createindex索引名on表名(字段名desc);
注:desc换成asc则是升序索引。
删除索引语法:
dropindex索引名;
(10)sql索引排序扩展阅读:
索引的使用及注意事项御哗
尽量避免这些不走索引的sql:
1、SELECT `sname` FROM `stu` WHERE `age`+10=30;不会使用索引,因为所有索引列参与了计算。
2、SELECT `sname` FROM `stu` WHERE LEFT(`date`,4) <1990; 不会使用索引,因为使用了函数运算,原理与上面相同。
3、SELECT * FROM `hounwang` WHERE `uname` LIKE'后盾%' 走索引。
4、SELECT * FROM `hounwang` WHERE `uname` LIKE "%后盾%"不走索引。镇兆行
5、字符串与数字比较不使用索引;
CREATE TABLE `a` (`a` char(10));
EXPLAIN SELECT * FROM `a` WHERE `a`="1"走索引。
EXPLAIN SELECT * FROM `a` WHERE `a`=1 不猜局走索引
参考资料:网络索引