mysql查詢用不用索引疑問

2022-06-19 02:54:12 字數 2110 閱讀 4876

一、單錶查詢索引列和查詢索引列+其他非索引列  查詢資料速度為什麼有差?為什麼查詢非索引列會不走索引?

現象: 單個表,結構如下:

create table `t_attach_new` (

`id` int(11) unsigned not null auto_increment,

`fname` varchar(100) not null default '',

`ftype` varchar(50) default '',

`fkey` text not null,

`authorid` int(10) default null,

`created` int(10) not null,

`hash` varchar(255) default null,

`web_url` varchar(255) default null,

primary key (`id`),

key `fname` (`fname`),

key `created` (`created`),

key `id` (`id`,`created`),

key `created_2` (`created`,`id`)

) engine=innodb auto_increment=2621401 default charset=utf8;

查詢語句,下面兩個。

為什麼掃瞄行數一樣,第乙個沒用索引,第二個用了呢?

第乙個是直接掃瞄的所有資料行,並且沒用到主鍵索引,但是和用到主鍵索引一樣返回的相同的資料行(看下面的二可以清晰看到區別)

第二個是直接用了fname這個索引,但是返回的資料行與第乙個不一致。

返回的資料

補充 explain type型別

二、接著看一下這三個查詢的區別,看看怎麼才用到索引

可以看出,1,3 加了order by 的查詢直接用主鍵索引了。2 沒加排序,也沒用到索引,全表掃瞄了。行數也對應增加了許多。

where 1 1 你愛用不用!!

資料庫語句 select from table where 1 1 的用法和作用 這是一種怎樣的查詢語句呢?首先說明,1 1這種語句,都沒有任何關係,對於您而言,沒有任何損失。另外,眾多 都有 select from table where 1 1 此類語句的介紹,並且,針對該類語句,講得實在是讓人...

客戶端用不用bind的區別

無連線的socket的客戶端和服務端以及面向連線socket的服務端 通過呼叫bind函式來配置本地資訊。使用bind函式時,通過將my addr.sin port置為0,函式會自動為你選擇乙個未占用的埠來使用。bind 函式在成功被呼叫時返回0 出現錯誤時返回 1 並將errno置為相應的錯誤號。...

客戶端 用不用 bind 的區別

客戶端 用不用 bind 的區別 2012 05 07 11 41 53 分類 c c 無連線的socket的客戶端和服務端以及面向連線socket的服務端通過呼叫bind函式來配置本地資訊。使用bind函式時,通過將my addr.sin port置為0,函式會自動為你選擇乙個未占用的埠來使用。b...