sqlserver 百万级数据 like性能对比

前两天调试一个报表卡住了。
数据表中大约有 9 00,000 个条目。
用户使用LIKE“张%”查询某人的姓名,但无法等待结果。
切换到CHARINDEX('张%', name),结果会立即显示出来。
这让我想到,LIKE 似乎生来就有一些磨损。

去年1 2 月份在Win1 0+SQL2 01 6 上进行了实验。
建表语句大概是这样的:
sql 创建表 t1 (id INT, 名称 VARCHAR(5 0)); INSERT INTO t1 (id, name) VALUES (1 , '张三');
使用LIKE检查1 0万位数据,CPU提升到9 0%,延迟约为7 秒。
如果更改 CHARINDEX,只需 3 秒多一点。
当有数百万行时,差异更加明显。
具体数据记录在笔记本上。
例如,LIKE 取 0:5 8 ,而 CHARINDEX 仅取 0:4 2
这个索引相当神秘。
为姓名建立索引后,LIKE的慢度会好一些,但在检查%Zhang%时仍然不行。
CHARINDEX加入索引后,1 0万位数据只需要1 .8 秒。
这两个函数似乎以不同的方式处理通配符。

等等,还有一件事。
如果LIKE是LIKE'%张%',性能会更好,大约。
1 分半钟。
CHARINDEX 仍然快得多。
这意味着什么?请注意,通配符位置会影响性能。

我突然恍然大悟,看到一个老人跑得更快了,LIKE'Zhang__',把%换成两个下划线。
这是一个很酷的举动,但我不太明白它为什么有效。
根据资料显示,下划线_完全匹配任何字符,但是为什么SQL Server会把它当作固定长度呢?
现在项目变了,关键字使用了CHARINDEX。
然而,我仍然在一份报告中使用LIKE,因为客户坚持进行模糊检查。
这让我有点恼火。
下次是不是要告诉顾客这个东西不能随便用?
顺便问一下 PATINDEX 在哪里?上次尝试过PATINDEX('张%', name),速度介于两者之间。
但这个函数返回第一个匹配的索引,使用起来比CHARINDEX更麻烦。

如何同步两个SQLServer数据库的内容

同步两个SQL Server数据库,并使用强制订阅来执行数据库同步操作。
主要步骤及注意事项如下。

1 .准备环境:
服务器环境:Windows 2 000 Server、SQL Server 2 000个人版。

客户端环境:Windows 2 000 Server、SQL Server 2 000个人版。

2 .用户帐号:
在服务器端创建域用户帐号:用户名:zlpuser,密码:zlp。

3 重新启动服务器。

重新启动 MSSQLServer 服务并使用域用户帐户 (zlp/zlp) 启动它。

4 安装分发服务器。

配置分发服务器工具并选择默认配置。

创建和管理发布,选择要发布的数据库(sz),并将其设为快照发布。

配置所需的订阅者(推送模式),输入客户端服务器名称(zlp),并使用SQL Server身份验证(sa,空密码)。

初始化订阅复制监视器并选择有效的订阅者 (zlp)。

5 .测试配置:
检查复制监视器中的状态并单击立即运行代理。

启动同步过程并确保没有错误标志。

6 .测试数据:
在服务器上执行插入操作:INSERT INTO wq_newsgroup_s VALUES ('测试成功', 5 )。

启动同步过程并检查订阅者是否插入记录。

7 更改同步时间。

选择每晚执行数据库同步过程。

注意:
服务器无法使用(本地)发布和分发数据。
您必须删除注册,然后为本地计算机名称创建新注册。

必须启动发布和分发服务器上的 SQL Server 代理服务。

使用推送模式时,不需要共享目录文件。
拉模式需要共享。

配置过程中可能出现的问题: 1 . MSSQLServer 和 SQL Server Agent 服务必须以域用户身份启动。
2 . 检查服务器名称是否匹配(srvid=0)。
3 . 检查SQL Server Enterprise Manager 的注册名称是否匹配。
4 . 检查是否可以成功访问服务器网络。
5 . 验证系统上是否存在所需的扩展存储过程。

实用笔记:
使用T-SQL命令管理发布和订阅并生成操作的SQL脚本。

SQL中TOP和LIMIT的分页用法 不同数据库中分页查询的语法差异

SQLServer 分页:TOP+ROW_NUMBER(),MySQL:END,PostgreSQL:LIMIT+INCRMENT。

索引优化:按索引中的列进行排序。

避免全表扫描:在 WHERE 子句中使用列列表。
延迟关联:通过深度分页,先获取,后关联。

分页光标:上一页的记录,过滤得到下一页。

ORM框架:使用Hibernate、MyBatis等自动转换分页。

容纳数据库层:根据数据库类型选择语法。

条件编译:在代码中识别数据库类型。

稳定排序:选择列表字段、避免函数、连接列表。

实用提示:分页前先建立搜索索引。