mysql - SQL Server减去MySQL功能

标签 mysql sql-server

我知道MySQL,并且正在尝试学习SQL Server。
我正在寻找SQL Server中而不是MySQL中的功能/关键字。
例如:TOP,聚集/非聚集索引等。

任何链接/指针表示赞赏。

谢谢!

最佳答案

希望您不要介意我从别人那里得到的答案粘贴。问题主要是关于性能,但是在涵盖性能的所有方面时,我也谈到了大多数引擎功能。对性能进行彻底的教育也将使您对功能进行全面的了解。

因此,这里是要研究的基本性能项目。这倾向于MSSQL,但不限于此:


您正在使用的系统的基本逻辑数据存储体系结构。例如,b树,范围,页面,它们的大小和配置,一次读取多少数据,行的最大大小(如果这在您的DBMS中是个问题),如何处理行数据(同样,如果这是DBMS中的问题)。
表和行数据的索引,约束和基本顺序:这些索引的堆,集群,非集群,唯一和非唯一性,主键,唯一约束,包括的列。在所有这些索引中,是否允许使用null,仅允许一个null或不允许。唯一符。覆盖指数。
SARGability(查找SARG,它是“ Search ARGument”的缩写)。
外键,默认值,级联删除/更新,它们对插入和删除的影响。
NULL是否需要任何存储空间以及是否受列位置影响。存储每种数据类型所需的字节数。字符串数据类型是否存储尾随空格。打包与非打包数据类型(例如,浮点数和十进制与整数)。集群索引和非集群索引中每页的行数(或磁盘读取的最小单位)的概念。
填充因子,碎片,统计信息,索引选择性,页面拆分,转发指针。
“分批”操作可以提高性能,原因以及提高效率的方法。
内,左,右,全和交叉联接。半联接(EXISTS)和反半联接(NOT EXISTS)。任何其他特定于语言的语法,例如mySql中的USING和SQL Server中的CROSS APPLY / OUTER APPLY。将连接条件放在外部连接的ON子句中与将其放在WHERE子句中的效果。
独立子查询,相关子查询,派生表,公用表表达式,应了解EXISTS和NOT EXISTS通常看上去会引入相关子查询,但在执行计划中通常将其视为联接(半联接或反半联接)。
以图形或文本方式查看和了解执行计划。查看CPU的统计信息/配置文件,读取,写入以及整个SQL批处理或单个语句使用的持续时间。了解执行计划和配置文件的局限性,实际上这意味着您通常必须同时使用两者来进行优化。缓存和重用执行计划,缓存中的计划到期。参数嗅探和参数化。与这些有关的动态SQL。
将数据类型转换为其他数据类型或仅使用这些数据类型的相对成本。 (例如,一条可靠的经验法则是,使用字符串比使用数字更昂贵。)
与基于集合的方法相比,逐行处理的成本通常很高。游标的正确用法(罕见,尽管有时需要)。功能如何隐藏执行计划成本。当问题可以成组解决时,编写每一行都会调用的函数的诱人陷阱(尽管学习如何看待这很棘手,特别是因为传统的应用程序编程往往会训练人们根据这样的函数进行思考) 。
搜寻,扫描,范围扫描,“跳过”扫描。使用在索引查找中找到的值,将书签查找又称为索引查找,然后是表查找到同一表。循环,合并和哈希联接。渴望和懒惰的线轴。加入订单。估计的行数。实际行数。
当查询太大时,应使用临时表或其他方式将其拆分为多个查询。
多处理器功能以及并行执行的优点和缺点。
Tempdb或其他临时文件的用法。临时表和表变量的寿命和范围(如果您的数据库引擎有)。是否收集这些统计信息(在SQL Server临时表中使用统计信息,而表变量不收集)。
锁定,锁定粒度,锁定类型,锁定升级,块,死锁。数据访问模式(如UPDATE首先,INSERT其次,DELETE最后)。意向,共享,排他锁。锁定提示(例如,在SQL Server UPDLOCK,HOLDLOCK,READPAST,TABLOCKX中)。
事务和事务隔离。读已提交,未提交,可重复读,可序列化,快照以及其他我现在不记得的内容。
数据文件,文件组,单独的磁盘,事务日志,简单恢复,完全恢复,最早的打开事务(也称为最小日志序列号(LSN)),文件增长。
序列,数组,列表,标识列,窗口函数,TOP /行数/返回的限制行数。
物化视图又称为索引视图。计算列。
1比1、1比0或1比1,很多对很多。
UNION,UNION ALL和其他“垂直”联接。 SQL Server也具有EXCEPT和INTERSECT。
将IN()列表扩展为OR。将IsNull(),Coalcece()或其他null处理机制扩展为CASE语句。
使用DISTINCT来“修复”查询而不是处理基本问题的陷阱。
链接服务器如何无法很好地通过链接进行联接,对链接服务器的查询通常会逐行进行,即使不明智,也可以跨链接提取大量数据以在本地执行联接。
在触发器中执行任何I / O或容易出错的任务的陷阱。触发器的范围(是为每行触发一次还是为每个数据操作触发一次)。
使前端,GUI,报告工具或其他客户端代替数据库引擎来执行客户端类型的工作(例如,将日期或数字格式化为字符串)。
错误处理。回滚事务以及无论嵌套深度如何,回滚事务始终会回滚到第一个事务,但COMMIT只提交一个工作级别。

关于mysql - SQL Server减去MySQL功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3632933/

相关文章:

mysql - MySQL 和 MariaDB 中使用 GROUP BY 和 ORDER BY 的不同结果集

mysql - 如何根据唯一的子行查找父行?

mysql - 如果我将 MySQL Connector/J (GPL) 作为我的包的一部分,我是否需要发布我的应用程序?

java - SQL Server SET XACT_ABORT ON 和 JAVA

sql-server - 如何更改无法重新编译的 Delphi 程序的硬编码数据库密码?

sql - 使用父节点上的 where 条件获取 XML 子节点的属性值

java - 如何获得MySQL员工实践?

java - 在 Spring Boot 中初始保存后更新 Hibernate 存储库条目

sql-server - SQL Server 的 BIT TYPE 反向数据

sql - 使用sql基于时间的过滤