2017-08-05 8 views
0

私はLinuxのVMとMysql 5.7.19を持っています。私はlong_query_time = 5を設定しているので、それはインデックスを使用しないため、クエリがログに記録されているようだ遅いクエリMysql 5.7 varcharカラムによる注文

# Time: 2017-08-05T11:10:36.881359Z 
# [email protected]: root[root] @ localhost [127.0.0.1] Id: 2070 
# Query_time: 0.000381 Lock_time: 0.000145 Rows_sent: 1 Rows_examined: 35 
SET timestamp=1501931436; 
SELECT * FROM `cliente` order by denominazione; 

:スロークエリのログ記録とlog-queries-not-using-indexes私はこのクエリを気づきました。私はしましたクエリをExplaning:

id select_type  table partitions type possible_keys key  key_len  ref  rows filtered Extra 
1 SIMPLE cliente  NULL ALL  NULL NULL NULL NULL 35 100.00 Using filesort 

これは私のテーブルのDDLです:

CREATE TABLE `cliente` (
    `id` bigint(20) NOT NULL, 
    `creatoDa` varchar(255) DEFAULT NULL, 
    `dataInserimento` datetime DEFAULT NULL, 
    `dataUltimaModifica` datetime DEFAULT NULL, 
    `modificatoDa` varchar(255) DEFAULT NULL, 
    `ENTITY_UID` varchar(36) NOT NULL, 
    `version` int(11) DEFAULT NULL, 
    `attivo` tinyint(1) NOT NULL DEFAULT '1',  
    `denominazione` varchar(255) NOT NULL, 
    `email` varchar(255) DEFAULT NULL, 
    `note` longtext, 
    `password` varchar(255) NOT NULL, 
    `username` varchar(255) NOT NULL, 
    `dataUltimoPing` datetime DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 



ALTER TABLE `cliente` 
    ADD PRIMARY KEY (`id`), 
    ADD UNIQUE KEY `UK_75j8vo25r1ws35vccamep965h` (`ENTITY_UID`), 
    ADD UNIQUE KEY `UK_sgwkt4eif8lb1e5miakwnu7q9` (`username`), 
    ADD KEY `idx_denominazione` (`denominazione`), 
    ADD KEY `idx_attivo` (`attivo`) 

MySQLは、私は、インデックス< 768上をしたことを考慮すると、ソート結果にインデックスを使用していない理由を私は思ったんだけどdenominazione(varchar(255))フィールド。

+0

テーブルにはどのようにmnayレコードがありますか?オプティマイザは常にインデックスを使用するとは限りません。 –

+0

私はちょうど35のレコードを持っています – drenda

答えて

2

MySQLのオプティマイザはコストベースであり、フルテーブルスキャンが検出されたのは、限られた行数/レコード数でレコードを取得する最速の方法です。ランダムなディスクI/Oを実行する代わりに、これらのいくつかの既存のレコードではるかに遅いレコードを取得できます。追加レコードによって、必要に応じて自動的にオプティマイザがインデックスを利用するようになります。

+0

それが最良の選択であるなら、なぜMySQLが遅いクエリファイルにログインするのですか?私は、クエリを最適化することを理解しました。 – drenda

+2

@drenda 35レコードしかないため、オプティマイザはフルスキャンを実行するよりインデックスの使用に時間がかかると判断しました。 –

関連する問題