我在一张有3500万条记录的桌子上创建了一个新索引,现在已经运行了将近1天.以前当我创建索引花了20分钟时,然而有些列是浮动的.新的idnex在varchar(45)上
我使用了processlist命令,该命令显示索引创建仍在使用以下输出
65417 | Repair with keycache | CREATE INDEX insert_index on checkins(dateinserted)
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人可以给我建议,以查明查询是否真的死了,只是坐在进程列表中.也许在某个阶段出现了问题,我不知道.
谢谢
所有索引都在SQL Server B Tree中吗?
主键和外键肯定应该是基于哈希的索引吗?
我遇到过这样一种情况:随着更多记录的添加,我对许多SQL Server数据库表的数据库操作变得非常缓慢(单个插入到具有100万条记录的表的5s).
我估计这可能是由于我的数据库中表的碎片索引,因为我有许多表使用(并且需要使用)主键聚簇索引的uniqueidentifier类型.
我如何评估是否是这种情况,如果存在任何碎片问题,如何解决碎片问题(可能每次部署一次)?
我想要一个适用于SQL Server 2005及更高版本的解决方案(我在Azure数据库(12.0.2000.8)中专门使用SQL Server).
sql sql-server fragmentation database-indexes azure-sql-database
我创建了一个 trigram 索引,以便执行带有 'like %text%' 条件的查询,但 PostgreSQL 9.6 不使用该索引来执行查询。
CREATE EXTENSION pg_trgm;
CREATE INDEX tb_estabelecimento_index08
ON tb_estabelecimento
USING gin
(nm_estabelecimento COLLATE pg_catalog."default"
gin_trgm_ops);
Run Code Online (Sandbox Code Playgroud)
当我执行查询时:
SELECT * FROM tb_estabelecimento WHERE
nm_estabelecimento LIKE '%SOMETEXT%'
Run Code Online (Sandbox Code Playgroud)
PostgreSQL 给我查询计划:
Seq Scan on tb_estabelecimento (cost=0.00..1.16
rows=1 width=1706)
Filter: ((nm_estabelecimento)::text ~~
'%SOMETEXT%'::text)"
Run Code Online (Sandbox Code Playgroud)
为什么 PostgreSQL 执行顺序扫描而不是使用索引?
我的表:
CREATE TABLE tb_estabelecimento
(
id_estabelecimento integer NOT NULL,
nm_estabelecimento character varying(100) NOT NULL,
ds_url_website character varying(1000),
nm_municipio character varying(200),
id_unidade_federacao integer NOT NULL,
CONSTRAINT tb_estabelecimento_pk PRIMARY KEY (id_estabelecimento),
CONSTRAINT tb_estabelecimento_uk UNIQUE …Run Code Online (Sandbox Code Playgroud) 在 postgres 数据库中,我有一个唯一约束和为其创建的两个唯一索引。我使用以下查询删除了约束:
alter table my_schema.users drop constraint users_dept_uk
Run Code Online (Sandbox Code Playgroud)
它已删除约束和一个索引,但第二个索引仍然存在。
以下查询仍然告诉我索引存在:
SELECT r.relname, r.relkind, n.nspname
FROM pg_class r INNER JOIN pg_namespace n ON r.relnamespace = n.oid
WHERE r.relname = 'users_dept_idx';
Run Code Online (Sandbox Code Playgroud)
它给出以下输出:
users_dept_idx, i, my_schema
Run Code Online (Sandbox Code Playgroud)
当我执行下面的查询时:
drop index my_schema.users_dept_idx
Run Code Online (Sandbox Code Playgroud)
我收到错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedObject) index "users_dept_idx" does not exist
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?由于我不再需要这个索引,无法删除它也无法插入数据。
I've unsuccessfully been through the AWS forum and Stack Overflow trying to find a solution to the following error:
Index column size too large. The maximum column size is 767 bytes
I am running a WordPress website with 1.5M records in the postmeta table. I recently added an index to the postmeta table, and all was testing ok. However I had an incident with my server today (botnet scan dwindled my RDS credits), and restarted both my Lightsail instance and …
我有一个只有 7 列的表,其中一列存储每一行的长文本数据。该文本列数据的平均字符长度约为 1500 个字符。该表有 500.000 行。
当我使用选择查询而不使用该文本列时,没有问题,查询按预期需要 10 秒。
但是,如果我将这个长文本列添加到我的查询中,则Select * from table_1需要 3 或 4 分钟才能完成此查询并使用数据适配器填充数据表。
为什么我需要查找所有长文本列记录?因为我需要对其使用文本过滤器,例如:
SELECT *
FROM table_1
WHERE longtextcolumn ILIKE ANY (ARRAY['%texttosearch1%', '%texttosearch2%'])
Run Code Online (Sandbox Code Playgroud)
我应该做什么来加快这一进程?表分区可以解决这个速度问题吗?或者我应该寻找索引?
有没有办法在oracle中创建索引只有它们不存在?
就像是
CREATE INDEX IF NOT EXISTS ord_customer_ix
ON orders (customer_id);
Run Code Online (Sandbox Code Playgroud) 我有这个查询来获取表上的索引列表:
SELECT
ns.nspname as schema_name,
tab.relname as table_name,
cls.relname as index_name,
am.amname as index_type,
idx.indisprimary as is_primary,
idx.indisunique as is_unique
FROM
pg_index idx
INNER JOIN pg_class cls ON cls.oid=idx.indexrelid
INNER JOIN pg_class tab ON tab.oid=idx.indrelid
INNER JOIN pg_am am ON am.oid=cls.relam
INNER JOIN pg_namespace ns on ns.oid=tab.relnamespace
WHERE ns.nspname = @Schema AND tab.relname = @Name
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常。但现在我需要对列列表进行查询,但我无法理解系统视图的工作方式。
具体来说,我正在寻找的是:
理想情况下,我想一次获得给定表的所有索引的上述项目。
请注意,我正在寻找的不仅仅是列名。
这个 Postgres 数据库拥有各种大小的表,最多可达 1000 万行。几乎所有的都有一个 BIGINT 主键,从 1 开始计数。
由于 BIGINT 是 64 位,但 1000 万行完全在 INT 的 20 亿最大值之内,因此是否值得将这些 BIGINT 列转换为 INT(32 位)和 SMALLINT(16 位)以加速某些重型 SQL?更紧凑地存储索引/表应该会给我们带来更高的缓存命中率。如果有的话,我能期望多少加速?不使用 BIGINT 有什么缺点吗?(假设达到 INT/SMALLINT 的最大值永远不会成为问题)
database-indexes ×10
postgresql ×5
database ×2
mysql ×2
sql ×2
sql-server ×2
oracle ×1
trigram ×1