2016-06-13 20 views
0

こんにちは私はjoomlaサイトからデータベースを監査するように求められてきました。最も重要なテーブルにはほぼ250のテーブルがあり、同時に働くカップルデータベースもありますが、ここでの主な問題は遅いクエリです。Mysql + Perconaで非常に遅いクエリ

スロークエリログでは、我々はこのようなものを見ることができます:

# [email protected]: user @ localhost [] Id: 186330 
# Schema: mainDB Last_errno: 1160 Killed: 0 
# Query_time: 92.095105 Lock_time: 0.232432 Rows_sent: 0 
Rows_examined: 0 Rows_affected: 0 
# Bytes_sent: 0 
SET timestamp=1463917461; 
SELECT * 
FROM `tablename` 
WHERE NOT(`option` LIKE'com_%'); 

これは、そのテーブルのクエリを作成します:

CREATE TABLE tablename (
    id bigint(20) UNSIGNED NOT NULL, 
    option varchar(255) DEFAULT NULL, 
    option2 varchar(255) DEFAULT NULL, 
    option3 varchar(255) DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
ALTER TABLE tablename 
ADD PRIMARY KEY (id); 

これは、サーバーのスペックです:

2 x 3ghz CPU cores, CentOS, 5 Gb Ram, 50 Gb SSD 
Mysql 5.6 
Server version: 5.6.29-76.2-log Percona Server (GPL), Release 76.2... 

ゆっくりとしたクエリの理由は何ですか?

答えて

0
EXPLAIN SELECT * 
    FROM `tablename` 
    WHERE NOT(`option` LIKE'com_%'); 

「ALL」と表示されます。つまり、クエリは単にテーブル全体をスキャンする必要があります。

テーブルの大きさはどれくらいですか?

"Rows_sent:0 Rows_examined:0"は困惑しています。結果セットには実際に行がありませんか?つまり、すべてoptionは「com_」で始まりますか?彼らは本当にそのクエリを実行する必要がありますか?

クエリを最適化する方法はありません。私はINDEX(option)が助けになるとは思わないが、試してみることができる。

+0

テーブルには100kレコードがありますが、まだRows_sentを取得しています:0 Rows_examined:0 Rows_affected:0 'com_'で始まるものはありません。これがサーバーの問題かもしれないと思いますか? – joseluiselp

+0

その 'EXPLAIN'からの出力は何ですか? –

関連する問題