⑴ mysql索引優化的規則注意事項
常見的簡化規則如下:
1)不要有超過5個以上的表連接(JOIN)
2)考慮使用臨時表或表變數存放中間結果。
3)少用子查詢
4)視圖嵌套不要過深,一般視圖嵌套不要超過2個為宜。
連接的表越多,其編譯的時間和連接的開銷也越大,性能越不好控制。最好是把連接拆開成較小的幾個部分逐個順序執行。優先執行那些能夠大量減少結果的連接。拆分的好處不僅僅是減少SQL Server優化的時間,更使得SQL語句能夠以你可以預測的方式和順序執行。
如果一定需要連接很多表才能得到數據,那麼很可能意味著設計上的缺陷。
連接是outer join,非常不好。因為outer join意味著必須對左表或右表查詢所有行。如果表很大而沒有相應的where語句,那麼outer join很容易導致table scan或index scan。要盡量使用inner join避免scan整個表。
優化建議:
1)使用臨時表存放t1表的結果,能大大減少logical reads(或返回行數)的操作要優先執行。 仔細分析語句,你會發現where中的條件全是針對表t1的,所以直接使用上面的where子句查詢表t1,然後把結果存放再臨時表#t1中:
Select t1….. into #tt1 from t1 where…(和上面的where一樣)
2)再把#tt1和其他表進行連接:
Select #t1…
Left outer join …
Left outer join…
3)修改 like 程序,去掉前置百分號。like語句卻因為前置百分號而無法使用索引
4)從系統設計的角度修改語句,去掉outer join。
5)考慮組合索引或覆蓋索引消除clustered index scan。
上面1和2點建議立即消除了worktable,性能提高了幾倍以上,效果非常明顯。
⑵ 長虹液晶電視我家出現了左上角軟體版本,編譯時間,索引6自動搜索的提示,請您詳細解答下
你進入了模擬電視模式,並在自動搜索頻道模式。如果當地有線電視還有模擬頻道就可以被搜索到,如果沒有,按遙控器信號源鍵選擇機頂盒所在的信號源即可
⑶ 電視機左上角出現索引編譯時間等怎麼消除
這個是進入了系統匯流排,可能是存儲器數據錯亂或是遙控器亂按巧合按到了。退出匯流排系統,要電視機型號。
⑷ 長虹等離子液晶電視開機屏幕上出現M軟體版本和編澤時間及索引,請問怎樣處理才能正常
長虹電視機屏幕上出現M字一般是表示電視機已經進入了工廠老化模式,只要退出該模式即可恢復正常。方法如下:
1、將遙控器對准電視機,按住待機鍵不放,堅持3秒鍾左右,紅色的M字就會變成綠色,松開按鍵就可以退出工廠老化模式;此時M字也會自動消失。
2、如果以上方法不能解決問題時,建議聯系電視機的售後服務,告知故障表現,由其指導操作解決該問題;或者由其安排專業技術人員上門為用戶調試、解決問題。
⑸ 如何索引 時間類型的索引的Series
Oracle中我們經常使用Date欄位類型記錄日期和時間,有的時候還在這個欄位上建立索引。
然後通過java程序訪問資料庫的時候,我們很自然的類似這樣使用:select * from table where endDate>? and endDate<?,然後通過PreparedStatement預編譯,再通過setTimestamp傳入由java.util.Date轉成java.sql.Timestamp的參數(因為java.sql.Date只有日期,java.sql.Time只有時間,所以我們只能用java.sql.Timestamp類型)。我們會認為這樣應該走索引區間掃描,效率應該是非常高的。
而事實上,Oracle會把sql解釋成如下這樣來執行:select * from table where TO_TIMESTAMP(endDate)>? and TO_TIMESTAMP(endDate)<?; 為什麼?因為傳入的參數是timestamp類型,Oracle從9.2版本以後支持這種類型,所以Oracle做了這樣的轉換,結果就是這個SQL執行變成了全表掃描。我們做的試驗,加了一個index hint,強制走時間索引欄位,結果效率也不高,sql執行變成了全索引掃描,和全表掃描沒多大區別。結果效率還是低。
不光直接使用JDBC會是這樣,Spring,iBatis在處理傳入參數是java.util.Date類型的時候,都會使用setTimestamp設定參數,所以都需要注意。
解決辦法(四種解決辦法,推薦方案一):
1.sql修改成這樣:select * from table where endDate>to_date(?,』yyyymmddhh24miss』) and endDate<to_date(?,』yyyymmddhh24miss』);然後將傳入參數格式化成對應格式的字元串在傳入,這樣由Oracle將字元串轉成Date類型,就很順利的走索引區間掃描,效率最高。
2.在建立資料庫連接的時候增加一個屬性oracle.jdbc.V8Compatible=true,代碼如下:
Properties prop=new Properties();
prop.setProperty(「user」,」****」);
prop.setProperty(「password」,」****」);
prop.setProperty(「oracle.jdbc.V8Compatible」,」true」);
Connection connection = DriverManager.getConnection(「jdbc:oracle:thin:@127.0.0.1:1521:test」, prop);
連接池也根據各自的配置方式增加這個屬性即可。目前看來這個屬性參數是處理時間映射關系的,但是還不確定它是否會帶來其他的問題,所以要慎重使用。
⑹ mysql 創建索引後,為什麼執行時間變長
在數據量太小的情況,建立索引確實有可能比沒有建前費時。索引的使用,一般是應用在對大量數據查詢中,如果都能數得過來,沒必要建。
給你舉個例子,就像汽車與人賽跑,前三秒可能車跑不過人,如果你設置的比賽距離就是30米,那汽車發揮不出它的優勢,並且表現出來的效果可能還不如人跑的速度快。
⑺ 怎麼停止idea 創建索引時間過長
可能是Windows Vista中內置的索引器停止工作了。這時,在Outlook 的「工具->即時搜索->搜索選項」菜單中的狀態信息使得系統仍會在所有的郵箱中進行先前項目的搜索。 可以試下以下方法,不敢保證一定行: 1. 關閉Microsoft Outlook。 2. 打開Vista...
⑻ 索引器怎麼刪除
加快或禁用Windows Vista的搜索索引中
The new indexing service built into Windows Vista has been the subject of a lot of complaints, since it seems to kick in at strange times and thrash your hard drive.新的索引服務建立在Windows Vista中一直受到了很多投訴,因為它似乎開始在陌生的時間和鞭打你的硬碟。 So what can we do to speed this up?因此,我們可以做些什麼,以加速這一行動?
There's two options: You can either trim down the amount of files that Windows Search is indexing, or you can disable it entirely if you never use the search.有兩種選擇:您可以削減數額的文件的Windows搜索索引,或者您也可以禁用它完全如果您從未使用搜索。
Trim Down Indexing Locations 削減索引位置
The best way to trim down the amount of processor time the indexing service uses is by trimming down the amount of files being indexed.最好的方式削減數額處理器時間使用索引服務是修剪下來的金額被編入索引的文件。 For instance, if you don't regularly search through your C: drive, there's really no need to be indexing it.例如,如果你不經常查找您的C :盤,但真的沒有必要將它的索引。
Personally, I love the search function for Outlook and the Start Menu, but that's the only places I care about indexing.就個人而言,我喜歡的搜索功能可以用於Outlook和開始菜單上,但這是唯一的地方我關心的索引。
Type Indexing into the control panel search or the start menu search box, and you should see an item called Indexing Options.類別索引到控制面板搜索或開始菜單的搜索框,你應該會看到一個項目叫做索引選項。
Here you can see the current list of locations that are being indexed.在這里您可以看到當前的位置清單正在索引。 For instance, I only index the start menu and Outlook.舉例來說,我只指數開始菜單和Outlook 。 If you want to modify or remove locations, use the Modify button.如果要修改或刪除的位置,使用修改按鈕。
All you have to do to remove a location from being indexed is uncheck the box.您需要做的要刪除的位置被編入索引是取消勾選。 You might have to click the Show All Locations button to see some of the default locations.您可能必須單擊顯示所有地點的按鈕,看到一些默認位置。
If you wanted to remove the start menu indexing, you'll need to click on Start Menu in the summary list at the bottom, and it'll automatically navigate to the item in the tree.如果您要刪除開始菜單上的索引,您需要點擊開始菜單中的摘要清單底部,它會自動定位到該項目中的樹。
The start menu indexing really doesn't take much processing time though, so I wouldn't bother removing that.開始菜單索引確實沒有太多的處理時間,因此我不會消除這一煩惱。
Completely Disable Indexing 完全禁用索引
If you'd prefer to completely disable the indexing service, you can disable it entirely by turning off the service.如果您希望完全禁用索引服務,您可以禁用它完全關閉該服務。
Open up Services through control panel, or by typing services.msc into the start menu search box.打開服務控制面板,或通過鍵入services.msc到開始菜單的搜索框。 Find "Windows Search" in the list of services and double-click on it to open it.找到「 Windows搜索」列表中的服務,並雙擊它來打開它。
Change the Startup type of the service to Disabled, and then click the Stop button to stop the service.更改啟動類型的服務禁用,然後單擊停止按鈕來停止該服務。
⑼ 如何加快建 index 索引 的時間
一. 先來看一下創建索引要做哪些操作:
1. 把index key的data 讀到內存
==>如果data 沒在db_cache 中,這時候很容易有大量的db file scatter read wait
2. 對index key的data 作排序
==>sort_area_size 或者pga_aggregate_target 不夠大的情況下,需要做 disk sort, 會有大量的driect path read/write , 另外,消耗大量CPU Time
3. 創建新的index segment , 把排過序的index data 寫到所創建的index segment 裡面
==>如果index 很大,那麼,有時也會有redo log 相關等待,如:
log buffer space ,log file sync , log file parallel write 等
所以,在建大表索引時,可以增大pga,增大temp tablepace,並且用nologging或並行選項。
如:
create index idx_logs on logs(time) nologging parallel 4;
並行度一般看CPU 個數。當然在CPU 比較空閑的情況下可以多並行幾個。對於單CPU 不建議用並行,這樣反而會增加創建時間。也可以根據v$session_wait 的資料,做針對性的tuning , 這樣可以降低點時間。
補充知識:
查看cpu 信息:more /proc/cpuinfo
查看內存信息:more /proc/meminfo
查看操作系統信息:more /etc/issue
有關索引概念性的東西,請參考我的Blog:
Oracle 索引 詳解
http://blog.csdn.net/tianlesoftware/archive/2010/03/05/5347098.aspx
二. 測試
自己也測試了下。測試環境:Oracle 11g R2, win7 64bit ,CPU T6670 2.2G 雙核, 內存:4G。
1. 查看錶的數據量:
SQL> select count(*) from custaddr;
COUNT(*)
----------
7230464
2. 查看現有索引:
SQL> select index_name,index_type from user_indexes where table_name='CUSTADDR';
INDEX_NAME INDEX_TYPE
------------------------------ ---------------------------
PK_CUSTADDR_TP_723 NORMAL
IX_CUSTADDR_ADDRABB_TP NORMAL
IX_CUSTADDR_TEAMID_TP NORMAL
IX_CUSTADDR_CUSTID_TP NORMAL
IX_CUSTADDR_COMPABB_TP NORMAL
IX_CUSTADDR_AREACODE NORMAL
IX_CUSTADDR_ADDR_TP NORMAL
已選擇7行。
3. 刪除索引:IX_CUSTADDR_CUSTID_TP
SQL> drop index IX_CUSTADDR_CUSTID_TP ;
索引已刪除。
4. 默認方式創建索引:
SQL> SET timing on;
SQL> CREATE INDEX IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID );
索引已創建。
已用時間: 00: 00: 48.37
單位:s
5. 用nologging 模式:
SQL> drop index IX_CUSTADDR_CUSTID_TP ;
索引已刪除。
已用時間: 00: 00: 00.09
SQL> CREATE INDEX IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID ) NOLOGGING;
索引已創建。
已用時間: 00: 00: 34.46
6. Nologging+ parallel 模式
SQL> drop index IX_CUSTADDR_CUSTID_TP ;
索引已刪除。
已用時間: 00: 00: 00.17
SQL> CREATE INDEX IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID ) NOLOGGING PARALLEL 2;
索引已創建。
已用時間: 00: 00: 52.56
SQL> drop index IX_CUSTADDR_CUSTID_TP ;
索引已刪除。
已用時間: 00: 00: 00.07
SQL> CREATE INDEX IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID ) NOLOGGING PARALLEL 4;
索引已創建。
已用時間: 00: 00: 53.44
看來在單CPU上,並行效果還不好.
7. Parallel 模式
SQL> drop index IX_CUSTADDR_CUSTID_TP ;
索引已刪除。
已用時間: 00: 00: 00.02
SQL> CREATE INDEX IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID ) PARALLEL 2;
索引已創建。
已用時間: 00: 00: 49.97
SQL> drop index IX_CUSTADDR_CUSTID_TP ;
索引已刪除。
已用時間: 00: 00: 00.02
SQL> CREATE INDEX IX_CUSTADDR_CUSTID_TP ON CUSTADDR (CUSTID ) PARALLEL 4;
索引已創建。
已用時間: 00: 00: 50.25
從上面的測試數據可以看出,700萬的數據,建索引,也在1分鍾以內。 但是並行在單CPU上效果不明顯,而且比光使用NOLOGGING還要慢,因為出現資源爭用了,可能是CPU的爭用,也可能是I/O的爭用。