小编Bla*_*bam的帖子

在一个事务中使索引成为非常大的 MySQL 表中的唯一索引 - 以下方法安全吗?

为了优化 SELECT 语句,我尝试在 MySQL 中使用以下 SQL 语句使索引唯一:

ALTER TABLE credentials DROP INDEX special_credential_id, ADD UNIQUE KEY special_credential_id(special_credential_id)

我的问题是:这是一笔交易吗?这意味着如果创建唯一索引失败,旧的special_credential_id索引是否仍然存在?通常创建一个新索引很容易,但我们讨论的是包含 100 个 Mio 条目的表。

mysql index optimization transaction query-performance

3
推荐指数
1
解决办法
815
查看次数

MySQL:如何优化导致负载非常高的某个SELECT语句?

有一个包含 25.000.000 个条目的表,我有以下查询,该查询每 2 秒启动一次,这会导致非常高的负载(在 Amazon AWS 中高达 40 AAS)。执行时间需要20秒到5分钟,甚至会导致用户浏览器超时,掉线率很高。

SELECT COUNT ( * ) AS `chk` 
  FROM ( SELECT `item_id` 
           FROM `items` 
          WHERE `item_status` IN (...) 
            AND `item_type` = ? 
            AND `user_id` != ? 
            AND `item_name` IN (...) 
          LIMIT 3 
       ) AS OTHERS
;
Run Code Online (Sandbox Code Playgroud)

索引优化已完成 - 、、 和user_id均已item_name建立索引(每列一个索引)。item_typeitem_status

更多信息:

  • 一个用户拥有 1 - 1.000.000 百万条条目
  • item_name 是varchar128
  • item_type 的基数为 7
  • item_status 的基数也是 7
  • 只需知道是否有三个或更多匹配项

请注意,在大约 50% 的情况下,MySQL 必须检查完整的表,因为找到的项目少于 3 个。因此,该限制仅在商品数量超过 3 件的情况下才有用。 …

mysql performance index query select

3
推荐指数
1
解决办法
1565
查看次数