年終總結之搜房網面試題(三)

2021-06-28 04:32:10 字數 3117 閱讀 5605

昨天停滯了一天,還是寒假到了懶散了啊,這是不行滴,踏踏實實做好自己的日常工作,是十分重要,不然怎麼拼命考研,拼命學技術,恩,突然靈光一閃,要是把從現在一直到考研的經歷寫成部落格是不是也不錯呢?嘿嘿嘿,啊哈哈哈啊哈。。。

咳咳,說正題,開始第三題:

對於1000萬資料量的表來說,對於唯一的id列建立索引與不建立索引,查詢速度有多大區別?

好吧,我承認我很low,從最基礎的來吧。

a. 什麼是索引?

索引是對資料庫表中乙個或多個列(例如,employee 表的姓名 (name) 列)的值進行排序的結構。如果想按特定職員的姓來查詢他或她,則與在表中搜尋所有的行相比,索引有助於更快地獲取資訊。

建立索引

的目的是加快對錶中記錄的查詢或排序。為表設定索引要付出代價的:一是增加了資料庫的儲存空間,二是在插入和修改資料時要花費較多的時間(因為索引也要隨之變動)。資料庫索引就是為了提高表的搜尋效率而對某些欄位中的值建立的目錄 。

因為,增加索引也有許多不利的方面。第一,建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。第二,索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。第三,當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。

b.如何建立索引?

首先建立乙個表

create table mytable(

idserial primary key,

category_id int not null default0,

user_id int not null default0,

adddate int not null default0

);

建立乙個簡單的索引

create index mytable_categoryid on mytable (category_id);
建立乙個多重索引

create index mytable_categoryid_userid on mytable(category_id,user_id);

c.百萬數量級的表的查詢資料

由於網上的前輩們說了,千萬級的資料小筆記本承受不起,所以我也從百萬級的開始吧,如果順利的話我也會試試千萬級別的。

構造測試資料

create table mytesttable as

select rownum as id,

to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as

inc_datetime,

trunc(dbms_random.value(0, 100)) as random_id,

dbms_random.string('x', 20) random_string

from dual

connect by level <= 1000000;

--mytesttabletest

create table mytesttabletest as

select rownum as id,to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as

inc_datetime,

trunc(dbms_random.value(0, 100)) as random_id,dbms_random.string('x', 20) random_string

from dual

connect by level <= 1000000;
好吧,這是oracle中的語法和方法,前輩們寫的**真是讓人欲仙欲死,建立表的解釋如下: 

create table as    是複製相同的表結構,as建立出來的表缺少原表的索引資訊,只有表的結構相同,沒有索引。

to_char()函式:將數值型或者日期型轉化成字元型。

sysdate函式,oracle獲取當前時間,

trunc()函式:擷取日期或數字,返回指定的數值。

rownum:是oracle系統順序分配為從查詢返回的行的編號,返回的第一行分配的是1,第二行是2,依此類推,這個偽欄位可以用於限制查詢返回的總行數,而且rownum不能以任何表的名稱作為字首。

dbms_random.string(選項,返回字串長度):用於產生隨機字串。   dual:oracle提供的最小的表,不論進行何種操作(不要刪除記錄),它都只有一條

記錄——'x'。

用途:1、select計算常量表示式,偽列等值;

2、檢視當前使用者;

3、用作計算器;

4、呼叫系統函式;

5、檢視序列值。

connect   by level 實現連續數字的插入。

以上**是oracle中最常用的快速構建大數量級表結構的語法,很重要,不懂也得背下。。。。

為mytesttable表建立索引:

create index sy001 on mytesttable(id);
測試sql如下:

select * from mytesttabletest  where  id='10000'; 

select * from mytesttable where id='10000';

疑問?:oracle裡是怎麼看到資料搜尋時間的?或者所有的資料庫能夠自動看到搜尋所需時間麼?(我記得有些資料庫圖形化視窗可以,那麼程式可以麼?)

select * from mytesttabletest where random_string='r5xlunrtkute1izt5r';

select * from mytesttable where random_string='r5xlunrtku5yte1izt5r';

由以上結果可知:

對於建立了索引的id來說,查詢速度的提公升還是相當明顯的,但對於非索引的查詢來說,提公升不是很明顯,當資料量增大時,之間的差距也會增大。

面試題總結 html面試題)

附上鏈結 doctype 的作用是什麼?宣告一般位於文件的第一行,它的作用主要是告訴瀏覽器以什麼樣的模式來解析文件。一般指定了之後會以標準模式來 進行文件解析,否則就以相容模式進行解析。在標準模式下,瀏覽器的解析規則都是按照最新的標準進行解析的。而在相容模式下,瀏 覽器會以向後相容的方式來模擬老式瀏...

面試題總結

網路部分 子網劃分 演算法部分 穩定排序 泡沫排序 bubble sort o n 插入排序 insertion sort o n 桶排序 bucket sort o n 需要 o k 額外空間 計數排序 counting sort o n k 需要 o n k 額外空間 合併排序 merge so...

面試題總結

1 關於商品秒殺的問題,如何保證100件商品,只能使前100個使用者搶到呢?思路1 我們可以使用redis快取的list儲存型別,當有乙個使用者請求到來時,將該使用者的id存放在list中,這樣當list中的llen長度達到100時就不在新增新的使用者id,然後在從list中取出對應的id運算元據庫...