当前位置: 首页 > news >正文

网站建设费长期待摊费用企业所得税2020最新

网站建设费长期待摊费用,企业所得税2020最新,企业网站文案外包,深圳沙头角网站建设点击上方蓝字关注我 互联网时代的进程越走越深,使用MySQL的人也越来越多,关于MySQL的数据库优化指南很多,而关于SQL SERVER的T-SQL优化指南看上去比较少,近期有学习SQLSERVER的同学问到SQL SERVER数据库有哪些优化建议&#xff1f…

点击上方蓝字关注我

a1c8ce07c866d972475080c566569c5f.png

    互联网时代的进程越走越深,使用MySQL的人也越来越多,关于MySQL的数据库优化指南很多,而关于SQL SERVER的T-SQL优化指南看上去比较少,近期有学习SQLSERVER的同学问到SQL SERVER数据库有哪些优化建议?本文列举了部分常见的优化建议,具体内容如下:

1.   优化建议

  • 索引优化:

    eg:考虑一个订单表 Orders,其中有列 OrderDate 和 CustomerID。如果经常需要按订单日期范围和顾客ID进行查询,可以在这两列上建立复合索引,以提高查询性能。

  • NULL 值判断避免全表扫描:

    eg:对于包含 status 列的用户表 Users,避免使用 SELECT * FROM Users WHERE status IS NULL,可以在设计表时设置 status 默认值,确保所有用户都有一个状态,然后使用 SELECT * FROM Users WHERE status = 0 进行查询。

  • != 或 <> 操作符避免全表扫描:

    eg:考虑一个产品表 Products,如果要查询所有不属于某个特定类别的产品,避免使用 SELECT * FROM Products WHERE CategoryID != 5,而是使用 SELECT * FROM Products WHERE CategoryID <> 5。

  • OR 连接条件避免全表扫描:

    eg:对于一个学生成绩表 Grades,如果需要查询得分为 A 或 B 的记录,避免使用 SELECT * FROM Grades WHERE Grade = 'A' OR Grade = 'B',而是使用 SELECT * FROM Grades WHERE Grade = 'A' UNION ALL SELECT * FROM Grades WHERE Grade = 'B'。

  • IN 和 NOT IN 避免全表扫描:

    eg:考虑一个员工表 Employees,如果需要查询属于某个特定部门的员工,避免使用 SELECT * FROM Employees WHERE DepartmentID IN (1, 2, 3),而是使用 SELECT * FROM Employees WHERE DepartmentID BETWEEN 1 AND 3。

  • LIKE 查询优化:

    eg:在一个文章表 Articles 中,如果需要模糊查询标题包含关键词的文章,避免使用 SELECT * FROM Articles WHERE Title LIKE '%SQL%',可以考虑全文检索或者其他优化方式。

  • 参数使用避免全表扫描:

    eg:在一个订单表 Orders 中,如果需要根据输入的订单号查询订单信息,避免使用 SELECT * FROM Orders WHERE OrderID = @OrderID,可以使用强制索引的方式,如 SELECT * FROM Orders WITH(INDEX(OrderID_Index)) WHERE OrderID = @OrderID。

  • 字段表达式操作避免全表扫描:

    eg:在一个商品表 Products 中,如果需要查询价格除以2等于100的商品,避免使用 SELECT * FROM Products WHERE Price/2 = 100,可以改为 SELECT * FROM Products WHERE Price = 100*2。

  • 字段函数操作避免全表扫描:

    eg:在一个员工表 Employees 中,如果需要查询名字以"Smith"开头的员工,避免使用 SELECT * FROM Employees WHERE LEFT(LastName, 5) = 'Smith',可以改为 SELECT * FROM Employees WHERE LastName LIKE 'Smith%'。

  • 不要在“=”左边进行函数、算术运算:

eg:在一个库存表 Inventory 中,避免使用 SELECT * FROM Inventory WHERE YEAR(StockDate) = 2023,而是使用 SELECT * FROM Inventory WHERE StockDate >= '2023-01-01' AND StockDate < '2024-01-01'。

  • 索引字段顺序使用避免全表扫描:

eg:在一个订单表 Orders 中,如果有复合索引 (CustomerID, OrderDate),查询时应该先使用 CustomerID,如 SELECT * FROM Orders WHERE CustomerID = @CustomerID AND OrderDate BETWEEN @StartDate AND @EndDate。

  • 避免写没有意义的查询:

eg:不建议使用 SELECT col1, col2 INTO #t FROM t WHERE 1 = 0,可以改为明确创建表结构并使用 CREATE TABLE #t (...)。

  • 使用 EXISTS 代替 IN:

eg:在一个产品表 Products 中,避免使用 SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM DiscontinuedProducts),可以改为 SELECT * FROM Products WHERE EXISTS (SELECT 1 FROM DiscontinuedProducts WHERE ProductID = Products.ProductID)。

  • 索引不一定对所有查询有效:

    eg:在一个性别字段 Gender 几乎均匀分布的表中,对 Gender 建立索引可能不会提高查询效率。

  • 索引数量谨慎选择:

    eg:在一个订单表 Orders 中,不宜过多地在每个列上建立索引,需要根据查询和更新的具体需求进行权衡。

  • 更新 clustered 索引数据列谨慎操作:

eg:在一个用户表 Users 中,如果频繁更新用户姓名,考虑是否将姓名列设为非聚集索引,以避免整个表记录顺序调整。

  • 使用数字型字段:

    eg:在一个学生成绩表 Grades 中,如果考试成绩以整数形式表示,使用整数型字段而非字符型字段。

  • 使用 VARCHAR/NVARCHAR:

eg:在一个文章表 Articles 中,如果存储文章内容,使用 VARCHAR(MAX) 而非 TEXT。

  • 避免使用 SELECT *:

eg:在一个员工表 Employees 中,避免使用 SELECT * FROM Employees,而是明确指定需要的列,如 SELECT EmployeeID, FirstName, LastName FROM Employees。

  • 使用表变量代替临时表:

eg:在一个小型数据集的情况下,可以使用表变量而不是创建临时表来存储中间结果。例如,使用表变量替代以下的临时表:

-- 不推荐
CREATE TABLE #TempResults (ID INT,Name VARCHAR(255),...-- 推荐
DECLARE @TempResults TABLE (ID INT,Name VARCHAR(255),...
);
  • 避免频繁创建和删除临时表:

eg:在一个存储过程中,如果需要多次使用相同的临时表,不要在每次使用时都创建和删除,而是在存储过程的开头创建一次,最后删除。

  • 合理使用临时表:

eg:在一个复杂的查询中,如果需要多次引用中间结果,可以考虑使用临时表。但应注意不要滥用,确保临时表的使用是必要的。

  • 选择合适的临时表创建方式:

eg:在需要一次性插入大量数据的情况下,可以使用 SELECT INTO 替代 CREATE TABLE 和 INSERT 的两步操作,以减少日志记录。

-- 不推荐
CREATE TABLE #TempTable (ID INT,Name VARCHAR(255),...
);INSERT INTO #TempTable
SELECT ID, Name, ...
FROM SomeTable;-- 推荐
SELECT ID, Name, ...
INTO #TempTable
FROM SomeTable;
  • 显式删除临时表:

eg:在存储过程或脚本的最后,确保显式删除所有创建的临时表,以释放系统表资源。

-- 不推荐
DROP TABLE #TempTable;-- 推荐
TRUNCATE TABLE #TempTable;
DROP TABLE #TempTable;
  • 避免使用游标:

eg:在一个订单表 Orders 中,避免使用游标来逐行处理数据,可以考虑使用集合操作或者其他优化方法。

  • 基于集的方法替代游标或临时表:

eg:在需要对大量数据进行操作时,尽量寻找基于集的解决方案,以避免使用游标或临时表。例如,使用窗口函数或联接来处理数据。

  • 存储过程中使用 SET NOCOUNT ON/OFF:

eg:在存储过程中使用 SET NOCOUNT ON 和 SET NOCOUNT OFF,以减少向客户端发送 DONE_IN_PROC 消息,提高性能。

-- 存储过程开头
SET NOCOUNT ON;-- 存储过程结尾
SET NOCOUNT OFF;
  • 避免大事务操作:

eg:在一个银行交易表 Transactions 中,避免在一个事务中处理过多的交易记录,以提高系统并发能力。

  • 避免向客户端返回大数据量:

eg:在一个日志表 Logs 中,如果查询可能返回大量的日志记录,应该审查客户端是否真的需要这么多数据,考虑分页或其他方式减少返回的数据量。

  • SQL Server执行计划掌握:

使用EXPLAINShow Execution Plan分析查询执行计划,发现潜在问题。

2.  结语

    熟悉其他数据库的同学应该也能对比出,很多数据库的优化经验是相通的,所以在学习其他数据库的时候可以借鉴已掌握的经验去对比学习,这样学习起来也会事半功倍。

3c8df4c32533400513c768f226a22373.png

往期精彩回顾

1.  MySQL高可用之MHA集群部署

2.  mysql8.0新增用户及加密规则修改的那些事

3.  比hive快10倍的大数据查询利器-- presto

4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

5.  PostgreSQL主从复制--物理复制

6.  MySQL传统点位复制在线转为GTID模式复制

7.  MySQL敏感数据加密及解密

8.  MySQL数据备份及还原(一)

9.  MySQL数据备份及还原(二)

b50ef1488723ac35497d55cfeaca6b92.png

扫码关注     

f8c36cc9084415172549eb98165a2c1c.jpeg

775268cd63f124511a50f8d8d9b92735.png

dc06f175e904097159dd33fbece3fdb2.png

http://www.yayakq.cn/news/169178/

相关文章:

  • 摄影网站备案广州知名的网站建设公司
  • 建设网站比较好的公司排名中卫中医肿瘤医院平面设计师
  • 网站建设ppt演示文档莆田cms建站模板
  • 看网站的关键词网站设计与开发网站策划
  • 做网站点子做网站上传的图片显示变形
  • 奉节集团网站建设网站设计包括
  • 陕西门户网站建设基于php的网站建设思路方案
  • 做网站的注意事项app的研发生产都包括什么
  • 空间商指定的网站目录wordpress设置新页面跳转
  • 专业网站设计软件工具国家允许哪几个网站做顺风车
  • 做网站电脑和手机都是一样可以看吗网站建设套餐是什么
  • 投资理财产品的网站建设广州网站开发解决方案
  • 舟山市建设信息港网站钢结构网站
  • 网站 验证码 错误网页版梦幻西游宠物
  • 打开网站总显示建设中2024装修图片100张
  • 网站开发 工具wordpress修改摘要字数
  • 高碑店网站建设百度网盘资源搜索引擎搜索
  • 装修论坛网站有哪些wordpress编辑器怎么换
  • 成都制作网站提供商开一个建筑公司容易吗
  • 电商网站开发的项目描述做推广必须知道的网站
  • 临沂做企业网站的公司会员管理系统手机免费版
  • wordpress站点图片多大合适搭建网站教程视频
  • 茂名企业自助建站系统普洱专业企业网站建设
  • 大学网站方案设计wordpress level
  • 美术网站建设方案网页设计与制作题目
  • 批量发布网站在哪些网站做收录比较快
  • 用什么软件做动漫视频网站重庆市建设工程信息网人员公示
  • 百度蜘蛛网站国外的设计网站app
  • 网站建设方案模板网站怎么做跟踪链接
  • 小白网站建设旅游商城网站模板免费下载