1. 程式人生 > >Mysql中欄位型別不一致導致索引無效的處理辦法

Mysql中欄位型別不一致導致索引無效的處理辦法

前兩天有個同事算資料,寫出來的sql執行很慢。那個sql也很簡單,就是一個左聯帶條件的查詢。explain之後發現,其中有一張表沒有用到索引。初始以為是沒有建索引,於是建上索引再試,發現問題依舊。後來查看錶結構才發現,原來用來做關聯的欄位是一個varchar型別的欄位,而聯接的另一張表中的欄位型別卻是bigint,結果造成了型別的不匹配,以致於索引失效。

如果要想索引起效,最直接的辦法就是將兩張表的對應欄位型別改成一樣的。但如果表中資料量很大,或者改型別有風險時可以採用另一種辦法,即通過型別轉換函式來處理。

下面詳細說明一下:

首先建立兩張測試表,分別是table_a,table_b.

123456CREATE
 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
12345CREATE TABLE `table_b` (`code` int(10) unsigned NOT NULL COMMENT '編碼',`namevarchar(20) 
NOT NULL COMMENT '名稱',KEY `code` (`code`)) ENGINE=InnoDB DEFAULT CHARSET=utf8

然後再往兩張表中分別插入幾條記錄

1234567INSERT INTO `table_a` (`id`, `code`) VALUES(1, '1001'),(5, '1001'),(3, '1002'),(6, '1002'),(2, 'A001'),(4, 'B001');
123INSERT INTO `table_b` (`code`, `name`) VALUES(1001, '測試1'),(1002, '測試2');

好了,資料準備完成,下面可以做測試了

首先,我們做一個簡單的左聯接查詢:

1234567mysql> 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伺服器) 看到這個報錯時,我仔細回想,我是對