相关疑难解决方法(0)

MySQL - 为 InnoDB 更改表的最快方法

我有一个要更改的 InnoDB 表。该表有大约 80M 行,并退出了一些索引。

我想更改其中一列的名称并添加更多索引。

  • 最快的方法是什么(假设我什至可能遭受停机时间 - 服务器是未使用的从站)?
  • 是“简单的” alter table,最快的解决方案吗?

这个时候,我只关心速度 :)

mysql innodb alter-table ddl

15
推荐指数
2
解决办法
5万
查看次数

为什么 MySQL 在强制执行此 order by 时忽略索引?

我运行一个EXPLAIN

mysql> explain select last_name from employees order by last_name;
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
| id | select_type | table     | type | possible_keys | key  | key_len | ref  | rows  | Extra          |
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
|  1 | SIMPLE      | employees | ALL  | NULL          | NULL | NULL    | NULL | 10031 | Using filesort |
+----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+  
1 row in set (0.00 sec)  
Run Code Online (Sandbox Code Playgroud)

我表中的索引:

mysql> show index from employees;  
+-----------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+---------------+  
| Table     | Non_unique | Key_name      | Seq_in_index | …
Run Code Online (Sandbox Code Playgroud)

mysql innodb index optimization explain

15
推荐指数
2
解决办法
3万
查看次数

MySQL 状态变量 Handler_read_rnd_next 增长很多

在 MYSQL 状态下,Handler_read_rnd_next 值非常高。

我知道,当执行没有正确索引的查询时,此值将增加。

但是,即使我们执行像“Handler_read_rnd_next”这样的显示状态,这个值也会增加 2。

基于这个状态标志,我们正在监控一些统计数据。

所以每一次,这个统计数据都显示出关键性。

我们能否从“Handler_read_rnd_next”计数中排除这些“显示”执行计数。

再举一个例子,

有一个 10 行的表,表在列 'data' 上建立索引,如果我们执行以下查询:

select data from test where data = 'vwx' -> returns one row
Run Code Online (Sandbox Code Playgroud)

如果我们检查 'Handler_read_rnd_next' 的值,它会增加 7。

以下是上述查询的解释命令的结果:

explain select data from test where data = 'vwx';

id, select_type, table, type, possible_keys, key, key_len, ref, rows, Extra

1, 'SIMPLE', 'test', 'ref', 'data', 'data', '35', 'const', 1, 'Using where; Using index'
Run Code Online (Sandbox Code Playgroud)

有没有办法限制这个值,或者我能知道为什么这个值增加得非常快。

mysql index-statistics

12
推荐指数
1
解决办法
2万
查看次数

MySQL为什么选择这个执行计划?

我有两个疑问,

select some_other_column 
from `table` 
order by primary_index_column asc 
limit 4000000, 10;
Run Code Online (Sandbox Code Playgroud)

select some_other_column 
from `table` 
order by secondary_index_column asc 
limit 4000000, 10;
Run Code Online (Sandbox Code Playgroud)

两者都返回 10 行;第一个需要 2.74 秒,第二个需要 7.07 秒。 some_other_column不是任何索引的一部分。 primary_index_column是主键列;secondary_index_column有一个 b 树索引和 200 的基数(根据 MySQL)。

下面是explain结果:

mysql> explain select some_other_column from `table` order by primary_index_column limit 4000000, 10;
+----+-------------+---------+-------+---------------+---------+---------+------+---------+-------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows    | Extra |
+----+-------------+---------+-------+---------------+---------+---------+------+---------+-------+ …
Run Code Online (Sandbox Code Playgroud)

mysql innodb performance index query-performance

7
推荐指数
1
解决办法
3044
查看次数

为什么 MySQL 不使用具有更高基数的索引?

我有一个source基数为 1122 的索引和一个state基数为 22 的state索引。MySQL在查询时一直使用该索引SELECT C1 FROM tbl WHERE source = 'x' and state = 'y'。这是正常的吗?如果没有,可能会出现什么问题?

mysql myisam mysql-5 index

7
推荐指数
1
解决办法
6440
查看次数

MySQL EXPLAIN 不显示 FULLTEXT 的“使用索引”

我有一个基本表:

create table fullTextTest
(
    id INT(11) NOT NULL,
    superText CHAR(255) NOT NULL,
    superLongText TEXT NOT NULL,
    primary key (`id`),
    FULLTEXT KEY `superText` (`superText`),
    FULLTEXT KEY `superLongtext` (`superLongtext`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

insert into fullTextTest
    set id=1,
    superText="Hi guys, how is it goin'?",
    superLongtext="Please give me some dummy text to search on!!!"
;

show index from fullTextTest;
| fullTextTest |          0 | PRIMARY       |            1 | id            | A         |           1 |     NULL | NULL   |      | BTREE      |         | …
Run Code Online (Sandbox Code Playgroud)

mysql myisam full-text-search

6
推荐指数
1
解决办法
2698
查看次数

表大小对性能的影响有多大?

假设我有一个包含 2938347 行的 MyISAM 表(以及其他表)。此表仅用于日志记录,不会经常清空。

如果不定期归档或删除这些行,是否保留该表会影响服务器性能?

那么,MySQL 服务器上的表/数据库大小如何,但不经常访问。这些表与经常访问/查询的表共存,我想知道它们是否导致问题。

大流士

mysql myisam performance optimization

6
推荐指数
1
解决办法
3227
查看次数

MySQL 查询优化:索引和分页

我正在将分页添加到我的“最新消息”php 脚本中,但遇到了一个问题。

SELECT sid, title, time, bodytext, author, url FROM news WHERE approved=1 ORDER BY time desc LIMIT $start, $limit
Run Code Online (Sandbox Code Playgroud)

我在批准的时间列上有索引。

问题是当我对查询执行 EXPLAIN 时,它显示它正在使用“已批准”索引 - 但它仍然必须扫描所有 1000 行才能获得我想要显示的 10 个新条目。

无论如何要优化查询,以免发生这种情况?

mysql optimization order-by

5
推荐指数
2
解决办法
2912
查看次数

尽管没有索引/键,但更改一个 WHERE 字段时,MySQL 查询速度非常慢

这对我来说是一个相当令人困惑的问题。我有一个充满棒球统计数据的数据库。运行此查询:

SELECT * FROM hits
JOIN stadiums ON stadiums.gameName = hits.gameName
JOIN players ON (players.gameName = hits.gameName AND players.id = hits.batter)
JOIN games ON games.gameName = hits.gameName
WHERE games.type = 'R'
LIMIT 50
Run Code Online (Sandbox Code Playgroud)

返回:

/* 0 rows affected, 50 rows found. Duration for 1 query: 0.218 sec. */
Run Code Online (Sandbox Code Playgroud)

但是运行这个查询:

SELECT * FROM hits
JOIN stadiums ON stadiums.gameName = hits.gameName
JOIN players ON (players.gameName = hits.gameName AND players.id = hits.batter)
JOIN games ON games.gameName = hits.gameName
WHERE games.leagueLevel = 'mlb'
LIMIT …
Run Code Online (Sandbox Code Playgroud)

mysql rdbms query

4
推荐指数
1
解决办法
1572
查看次数