mysql 數據庫查詢測試_MySQL查詢測試經驗

測試表geoinfo,整個表超過1100萬行,表結構:

CREATE TABLE`geoinfo` (

`objectid`int(11) NOT NULLAUTO_INCREMENT ,

`latitude`double NOT NULL,

`longitude`double NOT NULL,

`occupancy`bit(1) NOT NULL,

`time`datetime NOT NULL,

`cabid`varchar(16) NOT NULL,PRIMARY KEY(`objectid`),INDEX`idx_geoinfo_cabid_time`( `cabid`,`time`) USING BTREE

)

ENGINE=InnoDB

AUTO_INCREMENT=1

time字段為datetimes類型,建立了與cabid字段(varchar類型)的組合索引,整個表1100萬+行。

測試結果:

1. between比"大于a and 小于b"效率稍高一點點,僅僅是一點點:

sql1:select time,objectid,cabid from geoinfo where time(time) BETWEEN time('07:00:00') and time('12:00:00')# and cabid='acitva'sql2:select time,objectid,cabid from geoinfo where time(time)>=time('07:00:00') and time(time)<=time('12:00:00')

sql1耗時10.180秒,sql2耗時11.760秒。

但一旦在where子句中加上cabid字段,即,select time,objectid,cabid from geoinfo where time(time) BETWEEN time('07:00:00') and time('12:00:00') and cabid='acitva'

耗時立刻減少到0.040秒。

2.or效率超過union all,且or的次數越多差距越明顯(與網上多數的所謂"優化經驗"不同):

sql 3:select time,objectid,cabid from geoinfo where cabid like'a%' or cabid like 'b%' or cabid like 'e%'sql4:

select time,objectid,cabid from geoinfo where cabid like'a%'

union all select time,objectid,cabid from geoinfo where cabid like'b%'

union all select time,objectid,cabid from geoinfo where cabid like'e%'

sql3的執行時間為6.590,7.090,6.880秒,多數為6.9秒以內;

sql4的執行時間為7.892,8.452,7.912秒。兩者相差1-1.5秒。

sql 5:select time,objectid,cabid from geoinfo where cabid like'a%' or cabid like 'b%'sql6:select time,objectid,cabid from geoinfo where cabid like'a%'

union all select time,objectid,cabid from geoinfo where cabid like'b%'

sql 5的執行時間依次為,3.050,3.089,3.200秒

sql6的執行時間依次為,3.562,3.792,3.760秒,兩者相差0.5秒左右。

而把like改為'='號時,

select time,objectid from geoinfo where cabid='udwadla' or cabid='osacmu' or cabid='unquekov'

or與union all差不多。

3.索引似乎只對簡單的sql語句有提升,復雜一點的還是很慢。

例如:

select a.objectid as Aobjectid,b.objectid AS Bobjectid,a.time as Time fromgeoinfo_tiny a,geoinfo_tiny bwhere a.time=b.time and a.cabid='acitva' and b.cabid='abtyff'

其中對于geoinfo_tiny這樣只有280萬行的表,該語句執行時間就為95.361-100.004秒。索引似乎沒什么用了。

試試連接查詢:

select a.objectid as Aobjectid,b.objectid AS Bobjectid,a.time as Time fromgeoinfo_tiny ainner join geoinfo_tiny b on a.time=b.timewhere a.cabid='acitva' and b.cabid='abjoolaw'

多改幾次cabid的值,防止緩存,測試結果為95.635,39.172,85.862秒,可見連接查詢和多表查詢區別不大。

4.對于使用count這樣的聚合函數,有索引照樣很慢。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453657.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

更改阿里云域名解析臺里某個域名綁定的IP之后不能解析到新IP

1.由于要撤銷一組負載均衡&#xff0c;所以需要更改阿里云域名解析臺里某個域名由原來綁定的負載均衡公網IP換到服務器公網IP 2.在服務器上nginx指定了域名訪問&#xff0c;開啟nginx服務 3.暫時關閉該組負載均衡服務 4.實現通過服務器IP可以訪問項目&#xff0c;域名訪問不了 …

秒懂數據類型的真諦—Python基礎前傳(4)

一切編程語言都是人設計的&#xff0c;既然是人設計的&#xff0c;那么設計各種功能的時候就一定會有它的道理&#xff0c;那么設計數據類型的用意是什么呢&#xff1f; (一) 基本數據類型 基本數據類型&#xff1a; 數字 int字符串 str布爾值 bool列表 list元組 tuple字典 dic…

Linux 系統命令及其使用詳解(大全)

Linux 系統命令及其使用詳解(大全) (來源: 中國系統分析員) cat cd   chmod chown   cp cut   名稱&#xff1a;cat   使用權限&#xff1a;所有使用者   使用方式&#xff1a;cat[-AbeEnstTuv] [--help] [--version] fileName   說明&#xff1a;把檔案串連…

wordpress配置SMTP服務發送郵件

使用SMTP服務發送郵件&#xff0c;需要使用一個插件&#xff1a;http://wordpress.org/extend/plugins/wp-mail-smtp/ 下載完成以后解壓到plugin目錄&#xff0c;然后在插件中啟用這個插件。 配置SMTP服務 SMTP的選項 發送一封測試郵件吧 >>> 本文轉自齊師傅博客園博客…

使用rpm包安裝mysql_centos下利用rpm包安裝mysql

安裝mysql步驟&#xff1a;第一、 http://www.mysql.com/downloads/mysql-4.0.html下載MySQL-client-5.0.96-1.glibc23.x86_64.rpm和MySQL-server-5.0.96-1.glibc23.x86_64.rpm第二、安裝服務端&#xff1a;[rootlfl01 mysql]# rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rp…

maxN - 返回數組中N個最大元素 minN - 返回數組中N個最小元素

從提供的數組中返回 n 個最小元素。如果 n 大于或等于提供的數組長度&#xff0c;則返回原數組&#xff08;按降序排列&#xff09;。 結合使用Array.sort() 與展開操作符(...) &#xff0c;創建一個數組的淺克隆&#xff0c;并按降序排列。 使用 Array.slice() 以獲得指定的元…

Linux 常用命令

Linux之所以受到廣大計算機愛好者的喜愛&#xff0c;主要原因有兩個&#xff0c;首先它是自由軟件&#xff0c;用戶不用支付費用就可以使用它&#xff0c;并可根據自己的需要對它進行修改。另外&#xff0c;它具有Unix的全部功能&#xff0c;任何使用Unix系統或想要學習Unix系統…

使用Server 2008新GPO做驅動器映射

在Server 2003的時代&#xff0c;我們為用戶做網絡驅動器映射(以下就直接稱為Map Network Drive&#xff09;, 通常可能有以下的做法. 方法一: 做一個登錄腳本&#xff0c;放在DC的netlogon目錄&#xff0c;接著在“Active Directory用戶和計算機”控制臺的用戶屬性的Logon S…

electron 打包后 __static_electron開發客戶端注意事項(兼開源個人知識管理工具“想學嗎”)...

窗口間通信的問題electron窗口通信比nwjs要麻煩的多electron分主進程和渲染進程&#xff0c;渲染進程又分主窗口的渲染進程和子窗口的渲染進程主窗口的渲染進程給子窗口的渲染進程發消息subWin.webContents.on(dom-ready, () > {subWin.webContents.send(message, {title: s…

180118 有趣的人工智能對話小程序

print(Hello world!) #輸入 print(What is your name?) # ask for their name 詢問名字 myName input()   #該你來回答名字了 print(It is good to meet you, myName)  #根據你的名字來給你打個招呼 print(The length of your name is:)  #然后看下一句 print(len(…

Linux 內核調試器 調試指南

Linux 內核調試器內幕 KDB 入門指南 Hariprasad Nellitheertha (nhariprain.ibm.com), 軟件工程師, IBM簡介&#xff1a; 調試內核問題時&#xff0c;能夠跟蹤內核執行情況并查看其內存和數據結構是非常有用的。Linux 中的內置內核調試器 KDB 提供了這種功能。在本文中您將了解…

學習API HOOK,編寫了一個winsock 的封包抓取程序,可免費使用;

開發環境是:windows 2000 delphi 7 監視API&#xff1a;recv,recvfrom,WSARecvEx,send,sendto,accept,bind,closesocket,connect socket 版本&#xff1a;wsock32.dll/*ws2_32.dll(暫時有兼容問題) 目前還不支持修改封包&#xff1b; 當前實現針對某個進程或多個選定進程的通…

fib函數用python編寫_Python中利用函數裝飾器實現備忘功能

“備忘”的定義“memoization”(備忘)這個詞是由Donald Michie在1968年提出的&#xff0c;它基于拉丁語單詞“memorandum”(備忘錄)&#xff0c;意思是“被記住”。雖然它和單詞“memorization”在某種程度上有些相似&#xff0c;但它并不是該單詞的錯誤拼寫。實際上&#xff0…

MyBatis學習總結(二)——使用MyBatis對表執行CRUD操作

MyBatis學習總結(二)——使用MyBatis對表執行CRUD操作 上一篇博文MyBatis學習總結(一)——MyBatis快速入門中我們講了如何使用Mybatis查詢users表中的數據&#xff0c;算是對MyBatis有一個初步的入門了&#xff0c;今天講解一下如何使用MyBatis對users表執行CRUD操作。本文中使…

cifs mount 掛載共享目錄_安裝cifsutils解決linux掛載windows共享文件夾

1、安裝mount.cifs軟件包yum install cifs-utils -y如果是離線環境&#xff0c;請參考我的另一篇文章https://blog.csdn.net/qq_37119960/article/details/1083313732、開始掛載mount.cifs //192.168.1.110/share /usr/local/winshare -o useradministrator,pass123456參數說明…

JFinal框架

FJinal過濾器(tomcat) 創建java類繼承JFinalConfig 會實現六個方法(有一個是攔截器的方法好像是,那個我好像看的跟struts2一樣但是又沒看懂暫時不寫) Controller層的測試方法 Entity實體類 常用方法 查詢 增加 刪除 修改 轉載于:https://www.cnblogs.com/guanzhuang/p/8317949.…

掌握 Linux 調試技術 使用 GDB 調試 Linux 軟件

簡介&#xff1a; 您可以用各種方法來監控運行著的用戶空間程序&#xff1a;可以為其運行調試器并單步調試該程序&#xff0c;添加打印語句&#xff0c;或者添加工具來分析程序。本文描述了幾種可以用來調試在 Linux 上運行的程序的方法。我們將回顧四種調試問題的情況&#xf…

集合之二:迭代器

迭代器的簡單使用 在遍歷容器時&#xff0c;我們可以使用for循環或者是增強for循環&#xff0c;但是不同的集合結構在遍歷時&#xff0c;我們要針對集合特點采取不同的方式&#xff0c;比如List是鏈表&#xff0c;我們可以直接當做數組處理&#xff0c;但Map是Key—Value的形式…

簡單使用ansible-playbook

1.使用以下命令給客戶端安裝httpd服務&#xff1a; [rootserver ~]# ansible testhost -m yum -a "namehttpd" 192.168.77.128 | SUCCESS > {"changed": true, "msg": "", "rc": 0, "results": ["Loaded …

原則

昨天例會上&#xff0c;領導分享了他最近看過的一本書《原則》。試想&#xff0c;工作上&#xff0c;生活中我的原則是什么呢&#xff1f;關于技術學習的原則。一開始的時候&#xff0c;一般都是遇到不會的再去學習&#xff0c;我一直比較喜歡帶著問題&#xff0c;這樣會學習效…