成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL數(shù)據(jù)類型隱式轉(zhuǎn)換規(guī)則

數(shù)據(jù)庫(kù) MySQL
今天遇到一個(gè)慢查詢,乍一看,明明創(chuàng)建了一個(gè)唯一索引,正常來(lái)說(shuō),上面的查詢語(yǔ)句應(yīng)該正好命中idx_areacode_period這個(gè)索引的,不應(yīng)該是慢查詢的。MySQ在查詢的時(shí)候,會(huì)將areacode轉(zhuǎn)換成浮點(diǎn)型進(jìn)行比較。

 

[[213994]]

現(xiàn)象

今天遇到一個(gè)慢查詢,查詢?nèi)罩菊业铰樵冋Z(yǔ)句是這樣的:

  1. select * from convert_test where areacode=0001 and period>='20170511' and period<='20170511'

convert_test表結(jié)構(gòu)如下:

  1. CREATE TABLE `convert_test` ( 
  2.     `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  3.     `areacode` char(12) NOT NULL DEFAULT ''
  4.     `period` int(6) unsigned NOT NULL DEFAULT 0, 
  5.     `mid_price` int(10) unsigned NOT NULL DEFAULT 0, 
  6.     `mid_change` float NOT NULL DEFAULT 0, 
  7.     `updated_datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  8.     PRIMARY KEY (`id`), 
  9.     UNIQUE KEY `idx_areacode_period` (`areacode`,`period`) 
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='隱式轉(zhuǎn)換測(cè)試表'

表中數(shù)據(jù)42W以上。

乍一看,明明創(chuàng)建了一個(gè)唯一索引,正常來(lái)說(shuō),上面的查詢語(yǔ)句應(yīng)該正好***idx_areacode_period這個(gè)索引的,不應(yīng)該是慢查詢的。

為了查看這個(gè)語(yǔ)句是怎么查詢的,我們?cè)跍y(cè)試庫(kù)中explain一下:

  1. mysql> explain select * from convert_test where areacode=0001 and period>='20170511' and period<='20170511'

結(jié)果如下:

可以看到,這里是沒(méi)有用到索引的。

原因

定義表的時(shí)候,areacode字段是字符串類型的,查詢的時(shí)候傳入的是0001,這里0001被Mysql當(dāng)做了整數(shù)處理為1,Mysql檢測(cè)到areacode這個(gè)字段的查詢類型是整型,就會(huì)全表掃描,將所有行的areacode轉(zhuǎn)換成整型,然后在做查詢處理。

找原因了,就很好解決了,上面的sql語(yǔ)句修改如下:

  1. mysql> explain select * from convert_test where areacode='0001' and period>='20170511' and period<='20170511'

結(jié)果如下: 

可以看到完全***了idx_areacode_period 這個(gè)索引。

擴(kuò)展

上面的period定義的時(shí)候是整型,但是查詢傳入的是字符串類型,那為什么會(huì)***索引的呢?

看一下官方的隱試轉(zhuǎn)換說(shuō)明:

  1. 兩個(gè)參數(shù)至少有一個(gè)是 NULL 時(shí),比較的結(jié)果也是 NULL,例外是使用 <=> 對(duì)兩個(gè) NULL 做比較時(shí)會(huì)返回 1,這兩種情況都不需要做類型轉(zhuǎn)換

  2. 兩個(gè)參數(shù)都是字符串,會(huì)按照字符串來(lái)比較,不做類型轉(zhuǎn)換

  3. 兩個(gè)參數(shù)都是整數(shù),按照整數(shù)來(lái)比較,不做類型轉(zhuǎn)換

  4. 十六進(jìn)制的值和非數(shù)字做比較時(shí),會(huì)被當(dāng)做二進(jìn)制串

  5. 有一個(gè)參數(shù)是 TIMESTAMP 或 DATETIME,并且另外一個(gè)參數(shù)是常量,常量會(huì)被轉(zhuǎn)換為 timestamp

  6. 有一個(gè)參數(shù)是 decimal 類型,如果另外一個(gè)參數(shù)是 decimal 或者整數(shù),會(huì)將整數(shù)轉(zhuǎn)換為 decimal 后進(jìn)行比較,如果另外一個(gè)參數(shù)是浮點(diǎn)數(shù),則會(huì)把 decimal 轉(zhuǎn)換為浮點(diǎn)數(shù)進(jìn)行比較

  7. 所有其他情況下,兩個(gè)參數(shù)都會(huì)被轉(zhuǎn)換為浮點(diǎn)數(shù)再進(jìn)行比較

所以,下面的幾個(gè)sql語(yǔ)句有相同的效果:

  1. select * from convert_test where areacode=0001 and period>='20170511' and period<='20170511'
  2. select * from convert_test where areacode=1 and period>='20170511' and period<='20170511'
  3. select * from convert_test where areacode=0001.0 and period>='20170511' and period<='20170511'
  4. select * from convert_test where areacode=1.0 and period>='20170511' and period<='20170511'

mysql 在查詢的時(shí)候,會(huì)將areacode轉(zhuǎn)換成浮點(diǎn)型進(jìn)行比較 

責(zé)任編輯:龐桂玉 來(lái)源: segmentfault
相關(guān)推薦

2009-07-02 15:59:55

JSP數(shù)據(jù)類型

2019-09-28 22:41:18

OracleMySQL隱式數(shù)據(jù)

2017-09-13 10:58:51

JavaScript轉(zhuǎn)換規(guī)則

2017-09-05 16:17:35

JavaScript運(yùn)算轉(zhuǎn)換

2023-08-14 08:35:36

2022-10-27 20:42:04

JavaScripJava編程語(yǔ)言

2010-09-06 16:25:46

SQL函數(shù)

2023-12-12 08:50:22

MySQL隱式轉(zhuǎn)換varchar

2017-07-10 13:38:07

MySQL數(shù)據(jù)類型整數(shù)類型

2022-02-23 21:24:21

索引SQL字符

2009-08-04 14:56:34

ASP.NET數(shù)據(jù)類型

2011-07-01 15:32:58

Qt 數(shù)據(jù)類型

2010-09-17 14:57:34

JAVA數(shù)據(jù)類型

2010-10-15 13:28:34

MySql數(shù)據(jù)類型

2009-09-04 10:49:19

C#隱式轉(zhuǎn)換

2024-12-09 12:00:00

Python編程數(shù)據(jù)類型轉(zhuǎn)換

2010-03-30 16:33:55

Oracle數(shù)據(jù)類型

2009-08-12 16:26:27

C#數(shù)據(jù)類型轉(zhuǎn)換

2009-09-01 16:35:55

C#操作String數(shù)

2010-09-06 17:35:43

SQL函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲精品www久久久 www.蜜桃av | 国产在线观看一区二区三区 | 亚洲精品久久久一区二区三区 | av在线一区二区三区 | 久久亚洲国产精品日日av夜夜 | av喷水| 久久精品欧美一区二区三区不卡 | 伊人久久在线观看 | 综合久久综合久久 | 国产日韩欧美精品一区二区三区 | 在线视频一区二区三区 | 无人区国产成人久久三区 | 国产精品久久久久久吹潮 | 国产精品日韩欧美一区二区三区 | 欧美成人激情视频 | 欧美福利视频 | 欧美a在线观看 | 三级特黄特色视频 | 免费99精品国产自在在线 | 中文字幕在线精品 | av在线播放网址 | 久久综合香蕉 | 欧美综合久久 | 国产九九精品 | 超碰在线播 | 国产成人精品一区二区 | 国精产品一区一区三区免费完 | 久久成 | 日韩精品一区二区三区 | 亚洲精品一区中文字幕乱码 | 国产在线拍偷自揄拍视频 | 亚洲精品日韩精品 | 精品国产精品国产偷麻豆 | 成人午夜精品 | 色视频欧美 | 成人免费观看男女羞羞视频 | 日日操夜夜操视频 | 欧美久久久久久 | 精品无码久久久久久久动漫 | 欧洲亚洲视频 | 亚洲视频在线观看一区二区三区 |