⑴ 一條sql執行過長的時間,你如何優化,從哪些方面
1、查看sql是否涉及多表的聯表或者子查詢,如果有,看是否能進行業務拆分,相關欄位冗餘或者合並成臨時表(業務和演算法的優化)
2、涉及鏈表的查詢,是否能進行分表查詢,單表查詢之後的結果進行欄位整合
3、如果以上兩種都不能操作,非要鏈表查詢,那麼考慮對相對應的查詢條件做索引。加快查詢速度
4、針對數量大的表進行歷史表分離(如交易流水表)
5、資料庫主從分離,讀寫分離,降低讀寫針對同一表同時的壓力,至於主從同步,mysql有自帶的binlog實現 主從同步
6、explain分析sql語句,查看執行計劃,分析索引是否用上,分析掃描行數等等
7、查看mysql執行日誌,看看是否有其他方面的問題
個人理解:從根本上來說,查詢慢是佔用mysql內存比較多,那麼可以從這方面去酌手考慮
⑵ sql string 長度限制嗎
SQL Server 2005 查詢語句 最大長度 測試 原來看過好像說SQL2005的查詢語句長度沒有什麼限定了。但是因為最近要寫一個查詢,可能要很多條件。估計會超過1W字元。所以就直接測試一下。結果是沒有發現有長度的限制。
⑶ java常量字元串過長怎麼解決
String內部是以char數組的形式存儲,數組的長度是int類型,那麼String允許的最大長度就是Integer.MAX_VALUE = 2^31 - 1 = 2147483647。又由於java中的字元是以16位存儲的,因此大概需要4GB的內存才能存儲最大長度的字元串。
不過這僅僅是對字元串變數而言,如果是字元串常量,如「abc」、」1234」之類寫在代碼中的字元串str,那麼允許的最大長度取決於字元串在常量池中的存儲大小,也就是字元串在class格式文件中的存儲格式:
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
u2是無符號的16位整數,因此理論上允許的string str的最大長度是2^16-1=65535。然而實際測試表明,允許的最大長度僅為65534,超過就編譯錯誤。
⑷ oracle 字元串連接的結果過長的問題怎麼解決
不能靠連接字元串來處理大字元串。一旦這個字元串長度超過4000,就會出現ORA-01489: 字元串連接的結果過長。你那個5000當然不行。不過可以用CLOB類型來處理。
⑸ sybase sql運行結果過長,拼了一個長字元串,顯示結果的時候自動給換行了,在換行的地方產生
set @sqlstr1=''
set @sqlstr2=''
select @sqlstr1+@sqlstr2
⑹ 如何通過sql的insert語句插入大量字元串到oracle的clob欄位
當通過insert語句直接插入大量字元串(主要是html的內容),超過4000字元時候,就會報:
ORA-01489: 字元串連接的結果過長
雖然欄位是clob,足以存儲,但是通過這種直接插入的時候,因為沒有強制指定帶插入字元串為clob類型,
oracle會把插入的字元串作為 「字元串類型」處理,由於oracle有最大字元串限制(不超過4000個字元),所以會報錯。
解決思路:指定待插入字元串類型為clob,可以使用過程或存儲過程
例子:
DECLARE
REALLYBIGTEXTSTRING CLOB := '待插入的海量字元串';
BEGIN
INSERT INTO test_table VALUES('test', REALLYBIGTEXTSTRING, '0');
end ;
/
commit;
這樣就可以解決問題。
補充:java的jdk對這種情景有通過l流的方式處理,因此比較方便。
另外:插入html內容,可能含有空格 ,字元&是oracle的關鍵字,因此插入之前要轉義
如:'||chr(38)||'nbsp;
⑺ oracle 「ora-01489字元串串聯過長」的問題
listagg聚合的結果列大小限制在varchar2類型的最大值內(比如4000).
'學號:' || y1.stu_id || ',姓名:' || y1.stu_name 這一部分超長了 用substr截取下substr('學號:' || y1.stu_id || ',姓名:' || y1.stu_name ,1,2000)
⑻ 如何讓SQLServer自動截取過長字元串
您好:
以下是幫您查找的資料,因為條件的關系,並沒有給您測試,見諒。
看SQLSERVER關於SET ANSI_WARNINGS的描述,
字元串的截斷應該是與該項設置有關。
請您在兩台機器(xp,win2003)上分別運行一下下面的代碼,比較返回的結果是否相同:
select databaseproperty(N'資料庫名稱',N'IsAnsiWarningsEnabled')
結果含義:
0-表示OFF
1-表示ON
⑼ sql中欄位id為number(16)由於數字過長,導致數據成為
只能把欄位設為字元型才能解決。否則超過15位有效數字的超長數字SQL肯定會按科學計數法來處理
⑽ 執行這條SQL語句的時候報錯:ORA-01489: 字元串連接的結果過長,請怎麼解決 是增加字元串鏈接么
應該是說,你拼接的查詢結果,某些行已經超過了varchar2(4000)的最大長度。