Mysql中欄位型別不一致導致索引無效的處理辦法
前兩天有個同事算資料,寫出來的sql執行很慢。那個sql也很簡單,就是一個左聯帶條件的查詢。explain之後發現,其中有一張表沒有用到索引。初始以為是沒有建索引,於是建上索引再試,發現問題依舊。後來查看錶結構才發現,原來用來做關聯的欄位是一個varchar型別的欄位,而聯接的另一張表中的欄位型別卻是bigint,結果造成了型別的不匹配,以致於索引失效。
如果要想索引起效,最直接的辦法就是將兩張表的對應欄位型別改成一樣的。但如果表中資料量很大,或者改型別有風險時可以採用另一種辦法,即通過型別轉換函式來處理。
下面詳細說明一下:
首先建立兩張測試表,分別是table_a,table_b.
123456 | CREATE TABLE `table_a` ( `id` int (10) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID' , `code` varchar (20) NOT NULL COMMENT '編碼' , PRIMARY KEY (`id`), KEY `code` (`code`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 |
12345 | CREATE TABLE `table_b` ( `code` int (10) unsigned NOT NULL COMMENT '編碼' , ` name ` varchar (20) NOT NULL COMMENT '名稱' , KEY `code` (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
然後再往兩張表中分別插入幾條記錄
1234567 | INSERT INTO `table_a` (`id`, `code`) VALUES (1, '1001' ), (5, '1001' ), (3, '1002' ), (6, '1002' ), (2, 'A001' ), (4, 'B001' ); |
123 | INSERT INTO `table_b` (`code`, ` name `) VALUES (1001, '測試1' ), (1002, '測試2' ); |
好了,資料準備完成,下面可以做測試了
首先,我們做一個簡單的左聯接查詢:
1234567 | mysql> SELECT count (1) FROM `table_a` a LEFT JOIN table_b b ON a.code = b.code WHERE b.code =1001; + ----------+ | count (1) | + ----------+ | 2 | + ----------+ 1 row in set , 2 warnings (0.00 sec) |
相關推薦
Mysql中欄位型別不一致導致索引無效的處理辦法
前兩天有個同事算資料,寫出來的sql執行很慢。那個sql也很簡單,就是一個左聯帶條件的查詢。explain之後發現,其中有一張表沒有用到索引。初始以為是沒有建索引,於是建上索引再試,發現問題依舊。後來查看錶結構才發現,原來用來做關聯的欄位是一個varchar型別的欄位,而聯接
mysql資料庫和查詢語句中欄位型別不匹配出現異常,查詢或更新多條的原因
說明 表結構和where查詢的欄位型別一致,均為字串或者是整數,不會型別轉化 表結構和where查詢的欄位型別不一致: 一個為TIMESTAMP或者是DATETIME,另一個為常量,常量會轉化為TIMESTAMP,再進行比較 一個為DECIMAL或者是整數,整數會轉化
oracle資料庫中,欄位型別不一致,導致查詢慢
最近一個WEBSERVICE突然變慢了,後查詢發現,後臺查詢也非常慢(記錄條數800多萬),索引也有,如下語句 SELECT P.ID,P.RECORD_ID,P.KEY_NAME,P.KEY_CONTENT FROM MED_E
資料型別不一致導致的SQL不走索引
前幾天,同事發來一條SQL,說是更新操作的時候執行的很慢,我看了下,資料量也不是很大。再檢視執行計劃,發現是執行路徑錯誤導致的,可是為什麼會走錯誤的執行路徑呢?統計資訊並沒有太大的問題。在這裡模擬下: 資料準備: --1.資料準備,表一: DROP TABLE t_tes
laravel-mongodb查詢條件與欄位型別不一致問題
因為PHP是弱型別語言,最常見的不一致的情況應該是整型與字串。 例如,當mongodb表的主鍵為NumberLong型別,如下的程式碼查詢不到結果 $id = '4476850'; $row = M
MySQL中欄位字符集不同導致索引不能命中
今天寫了一個sql,其中涉及的表中的資料量都差不多為50w左右,查詢發現用了8s。這個只是測試服上資料,放到正式服上,肯定一執行就掛了。 SELECT Orders. NO, GuidNo, Orders.CreateTime, sum(OrderItem.Quantit
那些原因會導致Mysql主從數據不一致
pac 基於 延遲 由於 註意 不同步 syn 損壞 主從復制 1.網絡的延遲由於mysql主從復制是基於binlog的一種異步復制,通過網絡傳送binlog文件,理所當然網絡延遲是主從不同步的絕大多數的原因,特別是跨機房的數據同步出現這種幾率非常的大,所以做讀寫分離,註意
Oracle_不刪除表中資料,修改表中欄位型別
資料庫表名稱為:TX_Separateout 現想將TX_Separateout 中的Comcode欄位由原來的number型別修改為varchar2(20) –修改一個欄位的型別 alter tabl
ssm中mybatis處理資料庫(mysql)與pojo屬性中型別不一致(string轉date)
一般在表設計的時候會考慮到資料庫欄位型別和java中屬性一致的問題,但是也有可能會出現一些情況導致型別不一致的問題,比如:二次開發中需求更改等。此時資料庫和java中的程式碼不能隨便更改,所以考慮的思路是通過typeHandler作為中間體來把型別轉換。
odi 11- Blob欄位報ORA-00932 資料型別不一致: 應為 -, 但卻獲得 BLOB 解決方法
感謝外國友人的帖子,我在一老外回帖中看到一句話, " you need to use the IKM (PL/SLQ) to solve it... " 恍然大悟,忘記IKM 的問題, 核心是sql的問題。 立刻在‘流’面板,把點選選擇臨時區域,選擇IKM選擇為:
oracle union查詢中BLOB欄位出錯問題,ora-00932:資料型別不一致:應為 -,但卻獲得BLOB
select blobf from table1 union select blobf from table2 出錯:ora-00932:資料型別不一致:應為 -,但卻獲得BLOB 因為:union會對欄位型別進行比較(相等和不等判斷),oracle不支援對大資料型別的比較操
oracle建立檢視包含clob欄位,報錯:資料型別不一致:應為-,但卻獲得CLOB
在oracle中建立檢視的時候,語句中包含有clob型別的欄位。檢視建立語句大概如下: CREATE OR REPLACE FORCE VIEW "T_PROJECTS" ("ID", "NAME","DSC_INFO") AS ( select a.id,a.name,
Mybatis框架實體類欄位與資料庫表字段不一致導致查詢該欄位的值一直為null
實體類如下所示: public class BasicInfo { private Integer basic_id; private String name; private
MySQL字符集不一致導致效能下降25%,你敢信?
故事是這樣的: 我在對MySQL進行效能測試時,發現CPU使用率接近100%,其中80%us, 16%sys,3%wa,iostat發現磁碟iops2000以下,avgqu-sz不超過3,%util最高70%,看來瓶頸不在磁碟IO上面,而在CPU上。sys部分使用率有點高。 於是我果斷使用perf
Newtonsoft.Json 版本不一致導致錯誤
gre newton code depend binding ken redirect 不一致 -c 可以在配置文件添加這部分,其他版本的不一致,也可使用這種方式解決. <runtime> <assemblyBinding xmlns="ur
jdk 版本不一致導致的錯誤
sdn res myeclipse pan 問題 get target 搜索 文件導入 平時做項目時難免會從git,svn下載代碼或者把別人的項目文件導入到自己的MyEclipse中進行操作,因此會遇到很多問題,常見的有一種是使用的jdk版本不一致造成的報錯, 錯誤案例:
華為和H3C交換機NTP version不一致導致時間無法同步解決辦法
有效 一個 一分鐘 服務器配置 原因 ESS 服務器 官方文檔 play 昨天給客戶內網網絡設備配置NTP服務,用的華為9303做的NTP服務器,其它設備為NTP客戶端。但是華為所有設備成功同步到NTP服務器,而H3C設備均無法正常同步。華為交換機作為服務器配置如下:ntp
namenode namespaceID與datanode namespaceID 不一致導致datanode無法啟動的問題
csdn sdn enter .net oot 改版 more version 進入 在啟動hadoop之後,發現如下datanode何在?????在重新啟動hadoop的時候,發現了問題,如下這說明datanode啟動時出錯了我們跟蹤這個問題,進入到log文件夾下,找到h
Greenplum hostname和address不一致導致配置文件無法加載
系統表 clas pst sysconfig href ado 其他 時報 segment 最近又遇到了幾個坑,逐一記錄分析下。 1、主機名hostname和address不一致 在又一次部署壓測環境交由測試組進行壓測時,同事修改了pg_hba.conf文件重新加載配置
Greenplum hostname和address不一致導致配置檔案無法載入
最近又遇到了幾個坑,逐一記錄分析下。 1、主機名hostname和address不一致 在又一次部署壓測環境交由測試組進行壓測時,同事修改了pg_hba.conf檔案重新載入配置檔案時報錯。(找不到localhost.localdomain伺服器) 看到這個報錯時,我仔細回想,我是對