1. 程式人生 > >select *與select 所有欄位的查詢效率比較

select *與select 所有欄位的查詢效率比較

mysql 5.1.37
表記錄數41,547,002,即4000w行

使用遠端客戶端取1000條資料,統計時間:

SELECT * FROM dmsp.dmsp_dimension_content LIMIT 0, 1000;
時間2.218s,網路消耗0.547s

SELECT id, appid, aop, t, uid, sid, pid, pname, bid, bname, ptype, sm, sv, bt, national, area, ov FROM dmsp.dmsp_dimension_content LIMIT 0, 1000;
取出所有欄位,時間2.250s,網路消耗0.578s
多次查詢(改變limit條件避免快取),時間變化不大。

結論:兩者差別幾乎可忽略。所以查詢所有欄位(或者大多數字段)的時候,大可select *來操作。如果某些不需要的欄位資料量特別大,還是寫清楚欄位比較好,因為這樣可以減少網路傳輸。

(1)SELECT *,需要資料庫先 Query Table Metadata For Columns,一定程度上為資料庫增加了負擔。
但是實際上,兩者效率差別不大。

(2)考慮到今後的擴充套件性。
因為程式裡面你需要使用到的列畢竟是確定的, SELECT * 只是減少了一句 SQL String 的長度,並不能減少其他地方的程式碼。

綜上:除平時練習使用,其他情況都不推薦使用 SELECT * FROM xxx

相關推薦

MySQL中existsin的使用 以及查詢效率比較

exists對外表用loop逐條查詢,每次查詢都會檢視exists的條件語句,當 exists裡的條件語句能夠返回記錄行時(無論記錄行是的多少,只要能返回),條件就為真,返回當前loop到的這條記錄,反之如果exists裡的條 件語句不能返回記錄行,則當前loop到的這條

select *select 所有查詢效率比較

mysql 5.1.37 表記錄數41,547,002,即4000w行 使用遠端客戶端取1000條資料,統計時間: SELECT * FROM dmsp.dmsp_dimension_content LIMIT 0, 1000; 時間2.218s,

HIVE中select除了某些之外的剩餘所有

這是HIVE中查詢語句的一個小技巧,一個表有很多欄位,我們想要除個別欄位外的剩餘所有欄位,全部列出來不方便且不美觀,實際上hive語句可以解決這個問題。選擇tableName表中除了name、id、pw

sqlite3 -- 查詢指定名字中年齡最大的一行所有資訊

#include <stdio.h> #include <stdlib.h> #include <sqlite3.h> static int callback(void *data, int argc, char **argv, char **azColName

JavaScript遞迴遍歷輸出json所有值的方法

宣告一個三層的json物件作為測試: var js={          "text":"MXCHIP won a prize",          "id": 1234,   &nbs

oracle利用分析函式row_number()over()查詢一張表所有並按照其中部分分組查詢最大值

先準備資料: deptid :部門id. parent_deptid :deptid 的父級部門,也就是depid 是他的子部門。 create table test_employee (empid int ,deptid int ,parent_deptid int,sa

sql 查詢除某一外的所有

方法1.     直接寫         select   列1,列2...列n   from   你的表           方法2.     從syscolumns中提出欄位資訊,用生成SQL語句的方法         declare   @sql   varchar(8

oracle 查詢所有表 表所有

       列出當前DB中所有表:        select table_name from user_all_tables        列出表中所有欄位:        select colu

sqlite系統表介紹(查詢資料庫中所有的表 查詢表中的所有

每一個 SQLite 資料庫都有一個叫 SQLITE_MASTER 的表, 裡面儲存著資料庫的資料結構(表結構、檢視結構、索引結構等),只可以對他使用查詢語句 SQLITE_MASTER 表DDL資訊如下: CREATE TABLE sqlite_master (type

mysql如何查詢一個表中所有的名字

用easyui datagrid 想動態生成列,在伺服器端執行,由於欄位用英文,所以需要查詢相應的註釋作為datagrid的表頭  mysql不區分大小寫,所以下面的大寫都可以換成小寫; select COLUMN_NAME,column_comment from INFORMATION_SCHEMA.Co

Java反射程式碼 得到某類的所有 getFields()getDeclaredFields()區別 getMethod()和getDeclaredMethod()區別

** * 得到某類的所有欄位 * */ public void reflect2(){       try {           Class cls = Class.forName("entity.UserBean");//載入UserBean類到記憶體中!獲取一個Cla

模糊查詢資料庫所有的值

模糊查詢資料庫的所有值,例如:輸入 張 顯示資料庫裡所有含有張的資訊     因為還是模糊查詢,所以想到的解決思路是對所有欄位進行查詢  這時候就遇到了問題。一般模糊查詢用的是 select * from 表名 where 列名 like '%%'; 但是查詢所有列不可能手動

查詢postgresql資料庫所有表中的所有包含一個字串

    宣告:不是通過sql語句查出來的,是藉助Navicat資料庫管理功能實現的. 具體操作如下: 開啟navicat資料庫管理工具,找到你要操作的資料庫,右鍵模式下的表 單擊在模式中查詢 看到

Django Field lookups (查詢

欄位查詢是指定SQL WHERE子句的核心內容的方式。 它們被指定為QuerySet方法filter()、exclude()和get()的關鍵字引數。 1、exact:精確查詢。如果為比較提供的值為None,則會將其解釋為SQL NULL   在MySQL中,資料庫表的“排序”設定決定了精確的比較是否區

Oraclemysql的型別整理

Oralce的欄位型別整理如下: Mysql的欄位型別整理如下: 最後面一欄是對應JAVA的基本型別。希望對初學者有用,初學者在學習JAVA的時候,不知道怎麼把JAVA的物件指向到ORALCE或者MYSQL的欄位中,通過這個表格 可以很清楚的瞭解到,物件對映成資

mysql多查詢去重

當資料表有主鍵時,使用group by 獲取相同欄位的最大主鍵即可,code如下: SELECT rn.* FROM table_name rn WHERE rn.id IN ( SELECT MAX(r.id) from table r GROUP BY a,b,c,d )

mysql資料庫中指定值在所有表中所有中的替換

MySQL資料庫:   指定值在資料庫中所有表所有欄位值的替換(儲存過程):   1.寫一個儲存過程,查指定資料庫中所有的表名:  CREATE PROCEDURE init_replace(in orig_str varchar(100),in new_str varchar(100),in db_n

django資料查詢

5.2.4 欄位查詢 相當於sql語句中where子句,它可以為filter、exclude和get方法提供引數。 屬性名稱__比較運算子=值 #是兩個下劃線 操作符 說明 示例

mysql find_in_set 和 like進行查詢時的對比

find_in_set()和like的區別: 在mysql中,有時我們在做資料庫查詢時,需要得到某欄位中包含某個值的記錄,但是它也不是用like能解決的,使用like可能查到我們不想要的記錄,它比like更精準,這時候mysql的FIND_IN_SET函式就派上用場了,下面來看一個例子。

Java 讀取任意shapefile的所有,並插入到MongoDB資料庫(Spring Boot)

文章目錄 Java 讀取任意shapefile的所有欄位,並插入到MongoDB資料庫(Spring Boot) 1. 統一返回結果封裝 2. shp檔案資料實體封裝 3. 核心程式碼