簡體   English   中英

慢查詢Mysql 5.7按varchar列排序

[英]Slow query Mysql 5.7 ordering by varchar column

我有一個使用Mysql 5.7.19的Linux VM。 記錄慢速查詢和log-queries-not-using-indexes我注意到此查詢:

# Time: 2017-08-05T11:10:36.881359Z
# User@Host: 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;

因為我設置long_query_time = 5 ,所以似乎記錄了查詢,因為它不使用索引。 解釋查詢:

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`)

考慮到我在denominazione(varchar(255))字段上的索引<768,我想知道為什么Mysql不使用索引對結果進行排序。

MySQL優化器是基於成本的,並且檢測到全表掃描是檢索有限行數/記錄數的記錄的最快方法。 與其做隨機的磁盤I / O來檢索記錄,這對於這幾個現有記錄來說要慢得多。 適當時,其他記錄將自動使優化器利用索引。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM