我希望 ...
- ...删除空格
- ...删除撇号
- ...将 'é' 和 'è' 替换为 'e'
我使用该功能regexp_replace()
。
目前,我可以删除空格,但效果很差。事实上,当属性包含多个空格时,仅删除一个空格。
我无法同时处理1.、2.和3. 。这可能吗?
下面是我的代码的链接:
我希望 ...
我使用该功能regexp_replace()
。
目前,我可以删除空格,但效果很差。事实上,当属性包含多个空格时,仅删除一个空格。
我无法同时处理1.、2.和3. 。这可能吗?
下面是我的代码的链接:
我想通过链接服务器从 SQL Server 2017 连接到 Oracle 数据库。我从 Oracle-Client-for-Microsoft-Tools-64-bit.exe 安装了 Oracle 驱动程序,但该驱动程序没有出现在链接服务器下的提供程序列表中。重新启动服务器,但仍然没有帮助。我缺少什么?我只从 Oracle 客户端安装程序包安装了 Oracle 驱动程序,因为我认为不需要其他部分。
我正在查看 WordPress 中的表定义查询,并注意到一些奇怪的事情。首先,查询是这样的:
CREATE TABLE $wpdb->comments (
comment_ID bigint(20) unsigned NOT NULL auto_increment,
comment_post_ID bigint(20) unsigned NOT NULL default '0',
comment_author tinytext NOT NULL,
comment_author_email varchar(100) NOT NULL default '',
comment_author_url varchar(200) NOT NULL default '',
comment_author_IP varchar(100) NOT NULL default '',
comment_date datetime NOT NULL default '0000-00-00 00:00:00',
comment_date_gmt datetime NOT NULL default '0000-00-00 00:00:00',
comment_content text NOT NULL,
comment_karma int(11) NOT NULL default '0',
comment_approved varchar(20) NOT NULL default '1',
comment_agent varchar(255) NOT NULL default '',
comment_type varchar(20) NOT NULL default 'comment',
comment_parent bigint(20) unsigned NOT NULL default '0',
user_id bigint(20) unsigned NOT NULL default '0',
PRIMARY KEY (comment_ID),
KEY comment_post_ID (comment_post_ID),
KEY comment_approved_date_gmt (comment_approved,comment_date_gmt),
KEY comment_date_gmt (comment_date_gmt),
KEY comment_parent (comment_parent),
KEY comment_author_email (comment_author_email(10))
) $charset_collate;
如您所见,comment_author_email
被定义为varchar(100)
,但其键被定义为 10 个字符的长度。这是为什么?由于大多数电子邮件的长度约为 10-15 个字符,是为了节省空间吗?
在这种情况下,这是否意味着 - 对于长度为 15 个字符的电子邮件 - 前 10 个字符将被索引,其余 5 个字符将不被索引?是这样的吗? (正如您所猜测的那样,我不是数据库专家)。
最后,我将为我正在构建的机制添加一个自己的表,该表需要存储电子邮件地址和电话号码。对于电子邮件地址,我将使用类似的定义。至于手机,为了安全起见,我想将其定义为 varchar(25),但对于其索引,再次使用长度为 10 个字符的密钥。对于这个规划你怎么看?
我们有一些代码通过 SQL 生成器来生成形式为的参数化 IN 子句WHERE id IN (?, ?, ?, ...) AND ...
。
如果列表为空,则生成器无法发出,IN ()
因为这是无效的 SQL。相反,它的问题WHERE id IN (SELECT NULL WHERE FALSE)
是提供相同的语义。
我希望 MYSQL 可以将其减少到WHERE FALSE
。但有趣的是,它未能做到这一点,实际上产生了全表扫描!
示例查询(mytable 是我创建的一个简单的测试表,有 50K 行,id 作为 PK)
select *
from mytable
where id in (select null where false);
有趣的是,如果我将子查询替换为命中实际表的子查询,我会得到一个更好的计划:
询问:
select *
from mytable
where id in (select null from information_schema.tables where false);
我的问题是,MySQL 这样做是否有某些原因(例如第一个查询的某些特定语义?)这是一个已知的错误吗?
更新:我向 MySQL 提交了此问题,他们已承认此异常并将其作为功能请求接受。
我是一名来自摩洛哥的年轻的自我思考网络开发人员,简而言之,我正在开发一个特殊的社交媒体项目,我通过该项目学习了编码,但随着时间的推移,它发展成了一个更大的项目。我已经达到了我想为我的帖子创建适当的分析工具的地步
所以这是带有星星评级幻灯片的帖子,我将其存储在带有(user_id,post_id,stars)的sql数据库中,但我想知道每次用户获取帖子时是否都必须count()?或者有一种更有效的方法来显示后期分析,因为我已经阅读了很多内容,但没有找到适合我的案例的解决方案,而且我没有解决这种规模的解决方案的企业经验。每次我请求该帖子时,我都必须计算星星和选民人数的总和,然后我做(星星/选民)以获得平均值,我不知道每次请求该帖子时都进行计数是否是一个好主意,但是我不知道如何以其他方式做到这一点。
我正在 Postgres 15 中使用警报表上的 Timescale 扩展执行以下查询,以获取用户名的最新警报。
EXPLAIN ANALYZE
SELECT *
FROM alerts_alerts
WHERE username IN ('<username_here>')
ORDER BY timestamp DESC
LIMIT 1
对于大多数用户名,查询执行速度很快,不到 150 毫秒。但是,对于某些用户名,需要更长的时间。几乎所有数据库都有大约相同数量的警报,大约 450 个,并且大多数数据库都有相当新的数据,全部在过去 6 个月内。
这是Explain Analyze
有问题的用户名:
"Limit (cost=0.29..2262.68 rows=1 width=86) (actual time=36129.346..36129.370 rows=1 loops=1)"
" -> Custom Scan (ChunkAppend) on alerts_alerts (cost=0.29..2262.68 rows=1 width=86) (actual time=36129.344..36129.368 rows=1 loops=1)"
" Order: alerts_alerts.""timestamp"" DESC"
" -> Index Scan using _hyper_1_234_chunk_alerts_alerts_timestamp_idx_1 on _hyper_1_234_chunk (cost=0.29..2262.68 rows=1 width=89) (actual time=5.795..5.796 rows=0 loops=1)"
" Filter: ((username)::text = 'username_long_query'::text)"
" Rows Removed by Filter: 30506"
" -> Index Scan using _hyper_1_233_chunk_alerts_alerts_timestamp_idx_1 on _hyper_1_233_chunk (cost=0.29..4337.82 rows=1 width=91) (actual time=11.112..11.112 rows=0 loops=1)"
" Filter: ((username)::text = 'username_long_query'::text)"
" Rows Removed by Filter: 59534"
[ ... Cut redundant log lines here ... ]
" -> Index Scan using _hyper_1_156_chunk_alerts_alerts_timestamp_idx_1 on _hyper_1_156_chunk (cost=0.42..11418.54 rows=2591 width=80) (never executed)"
" Filter: ((username)::text = 'username_long_query'::text)"
" -> Index Scan using _hyper_1_155_chunk_alerts_alerts_timestamp_idx_1 on _hyper_1_155_chunk (cost=0.29..7353.95 rows=749 width=84) (never executed)"
" Filter: ((username)::text = 'username_long_query'::text)"
[ ... Cut redundant log lines here ... ]
"Planning Time: 13.154 ms"
"Execution Time: 36129.923 ms"
现在,这是Explain Analyze
快速执行的用户名:
"Limit (cost=471.73..471.73 rows=1 width=458) (actual time=1.672..1.691 rows=1 loops=1)"
" -> Sort (cost=471.73..472.76 rows=414 width=458) (actual time=1.671..1.689 rows=1 loops=1)"
" Sort Key: _hyper_1_234_chunk.""timestamp"" DESC"
" Sort Method: top-N heapsort Memory: 27kB"
" -> Append (cost=0.29..469.66 rows=414 width=457) (actual time=1.585..1.654 rows=210 loops=1)"
" -> Index Scan using _hyper_1_234_chunk_alerts_alerts_fleet_a3933a38_1 on _hyper_1_234_chunk (cost=0.29..2.49 rows=1 width=372) (actual time=0.006..0.007 rows=0 loops=1)"
" Index Cond: ((username)::text = 'username_value'::text)"
" -> Index Scan using _hyper_1_233_chunk_alerts_alerts_fleet_a3933a38_1 on _hyper_1_233_chunk (cost=0.29..2.37 rows=1 width=385) (actual time=0.006..0.006 rows=0 loops=1)"
" Index Cond: ((username)::text = 'username_value'::text)"
[ ... Cut redundant log lines here ... ]
" -> Seq Scan on _hyper_1_83_chunk (cost=0.00..1.12 rows=1 width=504) (actual time=0.013..0.013 rows=0 loops=1)"
" Filter: ((username)::text = 'username_value'::text)"
" Rows Removed by Filter: 10"
" -> Seq Scan on _hyper_1_81_chunk (cost=0.00..1.12 rows=1 width=504) (actual time=0.009..0.009 rows=0 loops=1)"
" Filter: ((username)::text = 'username_value'::text)"
" Rows Removed by Filter: 10"
"Planning Time: 899.811 ms"
"Execution Time: 2.613 ms"
初步研究建议对数据库表进行维护。执行vacuum命令后,再次执行查询,但结果没有变化。
还应该指出的是,还有其他用户名使用“有问题的”规划,但执行时间仍然很快。
不确定如何解决查询执行时间的这种差异。添加另一个索引可能很有用,但由于我是 PostgreSQL 的新手,我目前不确定最好的方法。
考虑以下查询:
select distinct pnumber
from project
where pnumber in
(select pnumber
from project, department d, employee e
where e.dno=d.dnumber
and
d.mgr_snn=ssn
and
e.lname='employee1' and project.pnumber = 2 )
or
pnumber in
(select pno
from works_on, employee
where essn=ssn and lname='employee1' );
我想使用 brin 索引进行测试,因此我删除了所有表上的主键约束并添加了以下索引:
CREATE INDEX idx_brin_pnumber ON project USING brin(pnumber);
CREATE INDEX idx_brin_ssn ON project USING brin(ssn);
CREATE INDEX idx_brin_dnumber ON project USING brin(dnumber);
CREATE INDEX idx_brin_essn ON project USING brin(essn);
我曾经认为原因是连接期间需要 seqScans,但是当我在没有任何索引的情况下运行相同的查询并启用 seqscan 时,它的成本要低得多。那么这是什么原因呢?
我在一个简单的 scylla 集群上有大约 60GB 的数据,我想将它们迁移到 Cassandra 4.1.5。我已经用命令在 scylla 上拍摄了快照
nodetool snapshot -t scylla-20240524 --table <table> <keystore>
我现在尝试将其导入 Cassandra 运行
bin/sstableloader -d localhost -k <keystore> /mnt/scylla-20240524
但我得到以下输出:
Established connection to initial hosts
Opening sstables and calculating sections to stream
Skipping file me-4332-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4333-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4334-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4335-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4400-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4401-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4402-big-Data.db: table <keystore>.scylla doesn't exist
Skipping file me-4403-big-Data.db: table <keystore>.scylla doesn't exist
Summary statistics:
Connections per host : 1
Total files transferred : 0
Total bytes transferred : 0.000KiB
Total duration : 3954 ms
Average transfer rate : 0.000KiB/s
Peak transfer rate : 0.000KiB/s
我在 scylla 模式中找不到“scylla”作为表...我应该做些什么来准备 cassandra 模式?或者还有什么?
我们遇到了一些问题,导致我们无法将本地 SQL 2016 Std Ed 迁移到 Azure SQL 托管实例业务关键层,我想知道是否有人遇到过类似的问题并能为我们提供建议。我们的问题是:
https://erikdarling.com/are-long-compile-times-bringing-you-down/中的查询和信息对于识别这些查询非常有帮助(我也读过https://littlekendra.com/2024/03/05/long-compilers-who-time-out-not-in-query-store/)。我们也看到了一些编译超时:https://www.brentozar.com/blitzcache/compilation-timeout/。
我们正在尝试调整这些查询并降低其复杂性,因为我们被告知这应该会减少编译时间。几个月来,我们还尝试将 AZ MI 层升级到业务关键层,添加 vCores,并调整实例和数据库设置。
我们已经与 Microsoft 合作了几个星期的 Sev B 案例,并收到了一些提示,但仍然没有解决方案。3 级支持建议确保编译超时查询没有强制计划,因为计划强制允许 SQL 优化器花费比正常时间长 3 倍的时间进行编译,这会增加超时的可能性。唯一强制计划的是自动调整,它仅适用于 MI 的 FORCE_LAST_GOOD_PLAN 选项,请参阅https://learn.microsoft.com/en-us/sql/relational-databases/automatic-tuning/automatic-tuning?view=sql-server-ver16和https://learn.microsoft.com/en-us/azure/azure-sql/database/automatic-tuning-overview?view=azuresql。我们根据他们的建议关闭了 FORCE_LAST_GOOD_PLAN,这有助于解决一些较长的编译时间问题,但不是全部。我们不会使用计划指南 (USE PLAN N'<xml_plan>') 强制执行计划,也不会在查询存储中手动强制执行。他们建议调整查询以降低其复杂性,如果关闭 FORCE_LAST_GOOD_PLAN 不起作用,则运行 DUMP。我希望安排与他们的性能团队进行工作会议来解决这些问题。
更新:在 5 月 28 日与 3 级支持人员通话期间,我们注意到,即使是 SELECT COUNT(*) FROM Table 等一些简单查询也使用了 OptimizationLevel = FULL 而不是 TRIVIAL。3 级支持人员表示,我们无法更改任何设置来影响这一点,但会向产品团队提及此事。
我们正在审查我们继承的算法,因为它似乎没有遵循https://learn.microsoft.com/en-us/sql/t-sql/statements/alter-partition-function-transact-sql?view=sql-server-ver16中的最佳实践“始终在分区范围的两端保留空分区。保留两端的分区以确保分区拆分和分区合并不会引起任何数据移动。分区拆分发生在开始时,分区合并发生在结束时。避免拆分或合并已填充的分区。拆分或合并已填充的分区可能效率低下。它们效率低下,因为拆分或合并可能会导致多达四倍的日志生成,也可能导致严重的锁定。”但我们很困惑,为什么相同的代码在 MI 中运行时间更长,并且过度膨胀数据文件,而在 SQL 2016 Std Ed 中却没有。
我们考虑的另一个建议是使用 SQL 迁移到 Azure VM,但这将使我们的重新平台启动时间增加数月,以设置、测试和运行此环境,因为我们现在没有任何 Azure VM。我们还必须运行修补、备份等。
非常感谢你的帮助!Mike
卸载了旧的 PS 模块并将其替换为新的SQLServer,但现在系统作业的第三步syspolicy_purge_history
(Powershell 步骤)失败并显示以下消息:
PowerShell返回的错误信息为:“未加载版本为‘15.0’的指定模块‘SQLPS’,因为在任何模块目录中均未找到有效的模块文件。” '<
如果我#NOSQLPS
在脚本顶部添加,错误消息会略有变化,指示无法找到新模块:
'找不到驱动器。名称为“SQLSERVER”的驱动器不存在。 '
当前的 SQL 模块:
模块目录:
我怎样才能让它再次工作?
谢谢