web-dev-qa-db-ja.com

「 'View is not base table」および「Corrupt」エラーメッセージを発行する最適化コマンド

MySQLの経験はありません。私の上司はMySQLデータベースに対してoptimizeを実行しました。たくさんの意見に対して、私たちはメッセージを得ました

「tablexyz」はベーステーブルではありません

そして次のメッセージは

壊れた

これはビューに対するもののようであり、ベーステーブルに対するこれらのエラーメッセージは表示されませんでした。

これは誤ったエラーメッセージのように見えますか、それともテーブルに問題がありますか?

4
Worried

実行できません OPTIMIZE TABLE ビューに対して。エラーメッセージがCorruptになる理由がわかります

Mysqlでは、ビューは INFORMATION_SCHEMA.TABLES のテーブルとして表されます。

私は以前にこの観点から見解を話しました

ただし、 INFORMATION_SCHEMA.TABLES のビューには、ストレージエンジンとしてNULLがあります。

したがって、最適化するストレージエンジンが必要です。ストレージエンジンがNULLであるため、Corruptエラーメッセージは理解できます。したがって、エラーメッセージを気にする必要はありません。とにかく走れ - OPTIMIZE TABLE 基になるベーステーブル。

5
RolandoMySQLDBA

これを経験したので調べ始めました

SHOW CREATE TABLE tablexyz;

これは

HEADER RESULT NAMES
View, Create View, character_set_client, collation_connection

そして、2列目に含まれています:

CREATE ALGORITHM=UNDEFINED DEFINER=`%someone%`@`%some_ol_Host_name%` 
SQL SECURITY DEFINER 
VIEW `tablexyz`.`view_tablexyz` AS 
SELECT `tablexyz`.`some_column_name`,
       `tablexyz`.`some_more_column_names`
FROM `tablexyz`
JOIN `tableabc` ON `tablexyz`.`id` = `tableabc`.`id`
WHERE `tablexyz`.`some_column_names` = 'somevalues'
GROUP BY  `tablexyz`.`some_column_names`;

私にとって...まあ、ビューにすぎないことが判明しました。

注意すべき最後の1つ:

USE tablexyz;

ANALYZE TABLE tablexyz; -- Corrupt
CHECK TABLE tablexyz; -- OK
REPAIR TABLE tablexyz; -- Corrupt

チェックテーブルは、メッセージに一貫性がないため、誤検知を提供します。

ANALYZE TABLE & REPAIR TABLE state that the table is corrupted even though it is a view.

そしてCHECK TABLEは、テーブルに問題がないと言っています

# Table, Op, Msg_type, Msg_text
'tablexyz.tablexyz_view', 'check', 'status', 'OK'

奇妙だと思ったが ドキュメント によれば大丈夫だ

乾杯、ジェイ

1
JayRizzo